黑马程序员java培训就业班笔记:IO流体系总结

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

IO流总结

IO(Input Output)流

●IO流用来处理设备之间的数据传输

●Java对数据的操作是通过流的方式

●Java用于操作流的对象都在IO包中

●流按操作数据分为两种:字节流与字符流。

●流按流向分为:输入流,输出流。

输入流和输出流的流向的理解?

流就是处理数据的一种方式或者一种手段,或者理解为一种数据流。

从硬盘已有的数据读取出来放存里面的这个过程就是输入流。

把存中的数据存储到硬盘中的这个过程就是输出流。

简单理解就是:以存为中心。

什么时候使用流对象?

操作设备上的数据或操作文件的时候可以使用。

字符流

字符流的抽象基类:Reader , Writer。

字符流的理解,由来和作用?

由于很多国家的文字融入进来,比如说中文在编码表中默认占2个字节。而为了按照文字的单位来处理,所以出现了字符流。

由来:早期的字节流+编码表,为了更便于操作文字数据。

作用:为了处理文字数据。

复制文件的原理和代码。

原理:

首先用一个读取流对象和一个文件进行关联,然后用一个写入流对象作为目地的,为了把读取流中的文件传输到目的地流对象中,我们就提供了一个字符数组,

为了关联这个数组,所以读取流对象有一个read()方法与这个字符数组进行关联,同理,写入流对象也有一个write()方法与这个字符数组进行关联,

这样2个流对象就相连接了,而这个字符数组就相当于一个中转站。

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

/*

* 对文本文件进行复制。将c盘的文件复制到d盘中。

* 原理:其实就是一个最简单的读写过程。

* 从c盘源,读取数据,并将读到的数据,写入到目的d盘中。

*/

public class CopyTextFileTest {

public static void main(String[] args) {

FileReader fr = null;

FileWriter fw = null;

try {

//1,创建一个字符读取流读取与源数据相关联。

fr = new FileReader("demo.txt");

//2,创建一个存储数据的目的地。

fw = new FileWriter("copyDemo.txt");

//3,创建一个字符数组将读取流对象和写入流对象相连接。

char[] buf = new char[1024];

//4,每次读取的长度不一样,所以定义一个变量.

int len = 0;

//5,用循环读取文件中的数据

while((len= fr.read(buf)) != -1) //判断是否读取完没

fw.write(buf,0,len); //为了只读取有效的数据} catch (Exception e) {

}finally{

try {

fr.close();

} catch (IOException e) {

e.printStackTrace();

}

try {

fw.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

读取字符流对象的两种方式

第一种读取方式一次读一个字符

//1,创建一个文件读取流对象,和指定名称的文件相关联

//2,要保证该文件时已经存在的。如果不存在,会发生异常。FileNotFoundException

FileReader fr = new FileReader("Demo.txt");

//3,调用读取流的方法,read方法一次读一个字符,而且会自动往下读。

int line=0; //read返回时int型的数,即返回的是字符的ascII表对应的数字

while ((line=fr.read())!=-1)

{

sop((char)ch);

}

第二种读取方式

//1,创建一个文件读取流对象,和指定名称的文件相关联

//2,要保证该文件时已经存在的。如果不存在,会发生异常。FileNotFoundException

FileReader fr = new FileReader("Demo.txt"); //把Demo.txt中的数据读到控制台

//3,定义一个字符数组,用于存储独到的字符该read(char[]) //返回的是读到字符的个数

char[] buf = new char[1024];

int len=0;

while((len=fr.read(buf))!=-1) //把读到的字符暂时存到buf数组中

{

sop("num="+num+"...."+new String(buf,0,len));

}

缓冲区的基本思想?提高效率的原理。

缓冲区的基本思想就是对要处理的数据进行临时存储。譬如购物车以及篮子。

原理:

减少频繁的操作。

给读取流对象和写入流对象提供中转站。

相对于来回跑的麻烦,利用缓冲区的容量,可以一边先存储,满了后再写入的方式,这样就提高了效率。

BufferedReader ,BufferedWriter.高效的体现?

部将数组进行封装。

变成对象后,方便于对缓冲区的操作。提高效率。

并提供了对文本便捷操作的方法。

readLine

newLine。

自定义缓冲区,MyBufferedReader

import java.io.IOException;

import java.io.Reader;

/*

* 模拟一个缓冲区

* 基于已有的缓冲区思想,我们可以从源读取用read方法。

* 我们的缓冲区,应该是一个更高效的read读取方法。

*/

public class MyBufferTest extends Reader{

private Reader r;

private char[] buf = new char[1024];

private int count = 0,pos = 0;

public MyBufferTest(Reader r){

this.r = r;

}

/**

* 一次从缓冲区中取一个

* return 返回一个缓冲区中的字符

* throws IOException

相关文档
最新文档