Java中节点流和处理流的简单认知

开发工具与关键技术:MyEclipse 10、Java
作者:曾浩源
撰写时间:2019年04月14日

在程序中所有的数据都是以流的方式进行传输或保存的,所以在Java中IO流也是必不可少的。Java中的IO流在java.io包中。
在java.io包中不管是操作文件和目录都是使用File类来操作,File能新建、删除、重命名文件和目录,但是File不能访问文件内容本身。
而需要操作文件内容在java.io包中主要有两大类:字符流和字节流
(1)字符流
字符流主要的操作对象是文本,因为文本的占用内存小,如果使用字节流,可能会因为各种字节编码字节位数不同,从而使得读取文本不完整,产生乱码。字符流在操作的时候是使用到缓冲区(内存),如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区(内存),并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容。
(2)字节流
字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。

java中提供了专用于输入输出功能的包 java .io ,其中包括:
InputStream,OutputStream,Reader,Writer
InputStream 和OutputStream两个是为字节流设计的,主要用来处理字节或 二进制对象,
Reader和 Writer两个是为字符流(一个字符占两个字节)设计的主要用来处理字符或字符串。

操作流程
在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下:
1、使用File类打开一个文件
2、通过字节流或字符流的子类,指定输出的位置
3、进行读/写操作
4、关闭输入/输出
IO操作属于资源操作,一定要记得关闭

例如:使用字符流读取文本,然后写入新创建的文本当中。
在这里插入图片描述
在main方法里使用Reader读取文本内容,将Reader写入try(内,等结束后,可以自动关闭流),使用Writer输出内容到某个文本内。
声明局部变量int,用于记录内容读取的长度,声明char数组定义长度为1024,即1024个字符。
长度等于读取的长度,如果没读取成功,Reader返回-1。

测试时可以在控制台打印一下内容,接下来是使用writer输出,最后是关闭流。
字节流,一般是操作的对象是图片、视频、音乐等。这些无需关注文本字体,传过来就行了。
在这里插入图片描述
字节流和字符流差不多的写法,不同之处就是使用InputStream读取,使用OutputStream输出和使用byte数组进行存储读取的字节,定义1024
个字节,即1kb。其余和字符流一样,最后记得关闭outputstream流。

在OuiputStream或Writer实例化后的构造器内添加参数true,则可为该文件追加内容,而不是覆盖原有内容。例如:

Writer writer = new FileWriter(new File(“E:\hh\777.txt”),true);

Java中操作文件内容分两类,而IO流主也可以分为节点流和处理流两大类。
以上用到的四个:FileReader、FlieWriter、FileInputStream、FileOutputStream四个都是常用的节点流。

节点流类型可以从或者向一个特定的地点或者节点读写数据。
处理流类型是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写,处理流的构造方法总是要带一个其他对象作为参数,一个流对象进行过其他流的多次包装,叫做流的链接。

节点流主要类型如下:

类型 字符流 字节流
File(文件) FileReader FileWriter FileInputStream FileOutputSream
Memory Array(数组) CharArrayReader CharArrayWriter ByteArrayInputStream ByteArrayOutputSream
Memory String(字符串) FileReader FileWriter FileInputStream FileOutputSream
Pipe(管道) PipedReader PipedWriter PipedInputSream PipedOutputSream

而常用的处理流有:
1、缓冲流(BufferedInPutStream/BufferedOutPutStream和BufferedWriter/
BufferedReader)他可以提高对流的操作效率。
2、转换流(InputStreamReader/OutputStreamWriter)
3、数据流(DataInputStream/DataOutputStream)
4、打印流(PrintStream/PrintWriter)
5、对象流(ObjectInputStream/ObjectOutputStream)

猜你喜欢

转载自blog.csdn.net/qq_41657790/article/details/89341427
今日推荐