【java I/O流总结】其它字符流零散总结
作者:互联网
前面几个IO流相关博客总结了几个比较重要的类,还剩下几个,类源码非常易懂。这里简单总结一下我记录的要点。
CharArrayReader&CharArrayWriter
1. CharArrayReader
- 看了源码,感觉没什么作用,CharArrayReader大概就是遍历一个输入的char[] (可以从头开始也可以设offset),输出char或者char[]片段,相当于从输入的char中读取出来字符或者字符数组。
2. CharArrayWriter
- CharArrayWriter就是往一个实例域char[] (buf)中写入数据,可以写入码点值、char[]和String;
- 构造函数可以指定buf大小,默认是32;
- writeTo(Writer out) 方法,可以将buf输入到另一个字符输出流;
- 跟PrintWriter一样有很多append方法;
- toCharArray()和toString()方法,可以通过返回值获取到buf。其中经历了复制,剔除了数组空项。
IO流类源码中多处用到了字符串拷贝方法,我发现以下两个方法都被用到
System.arraycopy()和Arrays.copyOf()的区别
- arraycopy()需要目标数组,将原数组拷贝到你自己定义的数组里,而且可以选择拷贝的起点和长度以及放入新数组中的位置;
- copyOf()是系统自动在内部新建一个数组,调用arraycopy()将original内容复制到copy中去,并且长度为newLength。返回copy; 即将原数组拷贝到一个长度为newLength的新数组中,并返回该数组。适用于数组扩容或者缩减。
StringWriter&StringReader
- StringWriter和StringReader跟上面CharArray如出一辙,只不过写入写出的是String
- 注意由于String是定长类型,StringWriter中维护一个StringBuffer对象(构造时可以指定长度),可以通过getBuffer()直接获取,也可以通过toString获得String;貌似不能转化为char[]输出出来;
- StringReader读取只能读出来一个字符或者一个字符数组,不能String;
个人感觉,实践中,这些字符串输入输出方法,reader用在从一个String或char[]遍历获取数据,writer用在通过不同来源拼接一个String 或char[]。没什么大用
管道流
- PipedWriter中有一个实例域引用对应的PipedReader对象,但是PipedReader不引用它;
- 写数据时,PipedWriter中的write调用PipedReader的方法receive将数据写入PipedReader中的缓冲区实例域,read再从缓冲区读取;应该是这样。
- 感觉可以用于线程间通信,找机会也详细总结一波。
StreamEncoder和StreamDecoder
- 使用inputStreamReader和outputStreamWriter必须要调用它们;
- 它们会对数据进行字符——字节、字节——字符的转化,最终的读写操作还是调用字节流中的native方法来读写;
- 字节流中默认没有缓冲区,但是它们提供了字节缓冲区。
字节流的内容很多都跟前面学习过的字符流大同小异,如FileInputStream、BufferInputStream等等,总的看下来,字符流相当于是在字节流基础上做的进一步封装。当然也有少数独特的,如SequenceInputStream,这个后面有时间再填一下坑。
标签:总结,字符,PipedReader,零散,java,String,char,数组,字节 来源: https://www.cnblogs.com/buptleida/p/12625827.html