文章插图
文件流、字节流、字符流、缓冲流、转换流、内存流
文件流: 在JAVA 中 , 文件流负责操作文件 , 包括读取和写入;
FileInputStream// 文件的字节输入流;FileOutputStream// 文件的字节输出流;FileReader// 文件的字符输入流;FileWriter// 文件的字符输出流;
FileInputStream 和 FileOutputStream的父类分别是InputStream和OutputStream , 都是字节流 , 以面向字节的形式提供IO操作 。FileReader 和 FileWriter的父类则是Reader和Writer , 都是字符流 , 字符流以面向字符提供IO操作 , 同时 , 字符流兼容Unicode , 能够提供更好的国际化支持 。在读取数据时 , 字节流的数据存储单位是字节 , 在接收字节流数据时 , 会新建一个字节类型的数组(byte[])来接收读取的数据;字符流的数据存储单位是字符 , 在接收字符流数据时 , 会新建一个字符类组(char[])的数据来接收读取的数据 。
InputStream 和 OutputStreamInputStream:
InputStream及其子类的作用是用来表示不同数据源输入数据的类 , 其中封装了用于从数据源中读取数据的操作 。这些数据源包括:
- 字节数组:byte[];
- String对象;
- 资源文件:File;
- 资源管道;
- 其他流组成的流序列;
- 其他数据源 , 如网络资源;
- ByteArrayInputStream:将内存的缓冲区当作数据源输入;
- StringBufferInputStream:将String转换成InputStream;
- FileInputStream:从本地文件中读取数据;
- PipedInputStream:资源管道的输入端 , 也是PipedOutputStream的输入源;
- SequenceInputStream:能够将2个或者以上的InputStream合并成一个单一的InputStream;
- FileterInputStream:为文件资源读取提供筛选功能;
OutputStream:
OutputStream及其子类的作用是用来表示数据输出将要去向的目标 , 比如:文件、资源管道、字节数组等 。OutputStream也是因不同的目标有不同的子类:
- ByteArrayOutputStream:在内存中创建缓冲区 , 所有输出的数据都会暂存在缓冲区中;
- FileOutputStream:将数据写出到文件中;
- PipedOutputStream:作为PipedInputStream的输出端 , 与PipedInputStream一起实现资源的“管道化”;
- FileterOutputStream:为文件资源写出提供筛选功能;
Reader 和 Writer字符流有着和字节流近乎一样的功能 , 每个字节流api都能在字符流中找到与之相对应的 , 而且 , 字符流比字节流有着更好的性能;尽管如此 , 字符流的设计并不是为了取代字节流 , 相反 , 二者同时存在 , 相辅相成 。
Reader 和 Writer及其子类都提供了对Unicode的支持 , 这是他们和InputStream与OutputStream系拓展最大的不同 , 详细如下图所示:
文章插图
字节流和字符流的api对应
文件过滤器Java IO中提供了过滤器:FilterInputStream和FilterOutputstream , 用于筛选特定的输入流和输出流 。因为FilterInputStream和FilterOutputstream也是自InputStream与OutputStream继承而来 , 所以他们都可以读写来自InputStream与OutputStream的数据 。
FilterInputStream子类:
- DataInputStream:用于从流中读取基本类型的数据 , 比如:char、int、long等 , 往往与DataOutputStream配合使用;
- BufferedInputStream:代表“缓冲区” , 可以将数据暂存在缓冲区 , 使用它可以防止每次读取都进行实际的写操作;
- LineNumberInputStream:追踪输入流中的行号 , 可做调试用;
- PushbackInputStream:能弹出一个字节的缓冲区 , 能够将文件的最后一个字符返回(操作系统使用-1表示磁盘文件的结尾标记) , 通常作为编译器的扫描器 , 往往被编译器调用;
FilterOutputStream子类:
- DataOutputStream:用于从流中写出基本类型的数据 , 比如:char、int、long等 , 往往与DataInputStream配合使用;
- PrintStream:用于格式化输出 , 比如:java 的运行控制台打印;能够与DataOutputStream相互配合使用:DataOutputStream负责数据的存储 , PrintStream负责数据的显示;
推荐阅读
- 爱国的6字名言 爱国名言短句5~6字
- 鲁滨孙漂流记读后感 鲁滨孙漂流记读后感400字
- 北京的老字号,个个都藏着一道名菜
- 奥迪尾部的“数字+TFSI”代表什么意思?
- 试用期工作总结800字范文 实习期个人工作总结
- Java 如何利用钩子函数实现优雅停服?刨根问底
- 五分钟看穿Java并发相关概念,并发原来如此简单
- JavaScript、Ajax、jQuery全部知识点,1分钟速懂!
- 身份证号码18位数字都代表什么含义?
- 细黑发亮的红茶叫什么名字?[红茶]