CharArrayReader 和 CharArrayWriter
与字节流中ByteArrayStream
类似。
再次强调,在I/O流中,字节是万能的。而如果是纯文本可以采取字符方式,效率相对更高。
CharArrayReader构造方法:CharArrayReader(char[] buf)
从指定的字符数组中创建CharArrayReader。
1 | char[] chars = "土家族民族自治区ww1".toCharArray(); |
CharArrayWriter构造方法:CharArrayWriter()
创建一个新的CharArrayWriter。
1 | CharArrayWriter charArrayWriter = new CharArrayWriter(); |
注:
输出时候可以直接打印对象显示。输入时候不可以,需要用read方法
FilterReader (少)
用于读取已过滤的字符流,可以指定自己的规则。
BufferedReader 和BufferedWriter (相对较多)
与BufferedInputStream 和 BufferedOutputStream类似。
buffered
本身是带缓冲区的意思,所以我们可以从一个文件里面读取对应的数据。
BufferedReader构造方法:BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流。 参数是一个Reader对象。
下面第二句会划红线报错,因为Reader和InputStream不匹配(字节是无法直接匹配我们对应的一个字符的):
1 | InputStream inputStream = null; |
改进:
1 | Reader reader = null; |
接下来取数据,最简单的一种方式,每次读取一个字符:
1 | int read = reader.read(); |
字符读取效率比较低,BuferedReader多了一个readline()
,可以按行读取:
1 | String read = null; |
BufferedWriter构造方法:BufferedWriter(Writer out)
创建使用默认大小的输出缓冲区的缓冲字符输出流。
1 | BufferedWriter bufferedWriter = null; |
练习1
要求:从控制台(标准输入标准输出)进行一个数据读取。
system类中:
Stream 一定是针对字节的,而不是字符。
如何把字节转为字符?
利用处理流(字节–>字符)。
System.out本身归属于PrintSteam
,而PrintStream
又归属OutputStream
所以最终可以当成一个OutputStream的子类了,所以可以写成new OutputStreamReader(System.out)
1 | InputStreamReader inputStreamReader = new InputStreamReader(System.in); |
关闭四个流非常麻烦,可采取以下方式简化,之后就不需要再关闭I/O流:
1 | try( InputStreamReader inputStreamReader = new InputStreamReader(System.in); |
练习2
要求:例如发送一个请求(输入网址),服务器一定是要返回一个数据的。而这中间也是包含一个I/O流。试想能通过JAVA的I/O流来访问百度并且把首页相关信息返回给我吗?
只要经过网络传输,一般情况下都需要InputStreamReader
进行字节转字符和OutputStreamWriter
进行字符转字节的操作。
1 | BufferedReader bufferedReader = null; |
PrintWriter
PrintWriter
构造方法:
创建一个新的打印流,参数可以是File file
,可以是String fileName
,也可以是OutputStream out
1 | PrintStream printStream = null; |
System.out
归属于printStream
。
RandomAccessFile
文件类可以对文件进行相关的操作。
构造方法:
RandomAccessFile(File file, String mode)
创建一个随机访问文件流从File参数指定的文件中读取,并可选地写入文件。RandomAccessFile(String name, String mode)
创建随机访问文件流,以从中指定名称的文件读取,并可选择写入文件。
mode参数指定要打开文件的访问模式。 允许的值:r,w,s,d
通过RandomAccessFile
可以利用块来进行一个文件数据的读取。
1 | File file = new File("doc.txt"); |