流流流流流流流流流流流流流流流流流流流流流流流流流
I/O流!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1.什么是流?流是什么?
JAVA程序中,设备,文件对于数据的输入/输出操作都是以“流”的方式进行
读入数据:输入流,读出:输出流
所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,
字符只有在内存中才会形成。
字节流在操作时不会用到内存,字符流则会用到内存。
即在操作时,字节流和字符流的操作完成之后都不关闭输出流,
字节流的操作文件中存在输出的内容,而字符流操作的文件,为空白,输出的内容还在内存中
2.JAVA的字节流
InputStream是所有字节输入流的祖先
OutputStream是所有字节输出流的祖先
3.JAVA的字符流
Reader是所有读取字符串输入流的祖先
Writer是所有输出字符串的祖先
都是抽象类,不能直接new
字节流转换为字符流时,实际上是Byte[]转换为String
4.字节流与字符流的区别
(1)字节流的操作的基本单位为字节;
字符流操作的基本单位为Unicode码元
(2)字节流默认不使用缓冲区
字符流使用缓冲区
(3)字节流在读取时,读到一个字节就返回一个字节;字符流使用了字节流读到一个或多个字节时,
先去查指定的编码表,将查到字符返回
(4)字节流可以处理所有类型数据,而字符流只能处理字符
5. Reader-BufferedReader,InputStreamReader-FileReader
Writer-BufferWriter,OutputStreamWriter-FileWriter
InputStream-FileInputStream,FilterInputStream-BufferedInputStream
OutputStream-FileOutputStream,FilterOutputStream-BufferedOutputStream
- I/O流可以分为节点流和处理流两大类(是否直接与特定的地方(如磁盘,内存,设备等)相连)
节点流:可以从一个特定的地方读写数据
处理流:对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
如BufferedReader
处理流的构造方法总是要带一个其他的流对象做参数,
7.缓冲流(处理流的一种)
计算机访问外部设备或文件,比直接访问内存慢的多。如果我们每次调用read()方法或
writer()方法访问外部设备,CPU需要花许多时间在等外部设备响应,而不是数据处理。
因此开辟一个内存缓冲区的内存区域,程序每次调用read和writer都是在这个缓冲区,
缓冲区满了以后,系统才将这个缓冲区的内容一次集中写到外部设备或读取进来给CPU。
拥有缓冲区的流称为缓冲流,BufferedInputStream,BufferedOutputStream
BufferedReader,BufferedWriter
为了提高效率,可以用BufferedReader来很配合其他字节流,BufferedReader带有缓冲切,
可以先把一批数据读入到缓冲区内。
BufferedReader:
BufferedReader(Reader in ):创建一个使用默认大小输出缓冲区的缓冲字符输入流对象
BufferedReader(Reader out,int sz):创建一个使用指定个大小输出缓冲区的缓冲字符输入流对象
readLine():读取一个文本行
BufferedWriter:
BufferedWriter(Writer out):创建一个使用默认大小输出缓冲区的缓冲字符输出流对象
BufferedWriter(Writer out, int sz):创建一个使用指定大小输出缓冲区的缓冲字符输出流对象
newLine():换行
BufferedInputStream和BufferedOutputStream
验证缓冲流一BufferedReader:
File file = new File("D:\\yin.text")
Reader read = new FileReader(file);
BufferedReader bin = new BufferedReader(read);
str = bin.readLine();
bin.close();
read.close();
验证缓冲流二BufferedWriter:
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(int i = 0; i < str.length; i++){
bw.writer(str[i])
bw.newLine();
}
bw.close();
fw.close();
8.转换流:
对读取到的字节数据进行指定编码的编码转换。
使用inputStreamReader时是默认的编码表
InputStreamReader isr = new InputStreamReader(new FileInputStream(“a.txt”))
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),utf-8)