最重要的两个Reader和Writer的子类是InputStreamReader和OutputStreamWriter。
InputStreamReader接受一个Inputstream的underlying stream,用来读取raw bytes,然后用指定的编码集将其转换成Unicode character。
OutputStreamWriter从运行的程序中收到Unicode character,用指定的编码集将其转换成bytes,将bytes写入到underlying output stream中。
FileReader,FileWriter,StringReader,StringWriter,CharArrayReader,CharArrayWriter, 这些并不需要一个直接的raw stream,前2个用于File,后4个在java内部工作,并不用在网络编程中。
Writers
Writer除了flush()和close()外有5个writer()方法:
protected Writer()
protected Writer(Object lock)
public abstract void write(char[] text, int offset, int length)
throws IOException
public void write(int c) throws IOException
public void write(char[] text) throws IOException
public void write(String s) throws IOException
public void write(String s, int offset, int length) throws IOException
public abstract void flush() throws IOException
public abstract void close() throws IOExceptionwrite(char[] text, int offset, int length) 是其他几个方法的基础方法。
对应要写入“Network”,可以选用以下方法
char[] network = {'N', 'e', 't', 'w', 'o', 'r', 'k'};
w.write(network, 0, network.length);
w.write(network);
for (int i = 0; i < network.length; i++) w.write(network[i]);
w.write("Network");
w.write("Network", 0, 7);记得flush()和close(),close若再写入会报IOException。
InputStream的avilable()方法可以返回不用block返回的最少个数bytes,Reader的ready()只返回boolean的是否Reader可以被read。
BufferedReader、BufferedWriter是基于字符的,内部有char array作buf,BufferedInputstream、BufferedOutputstream是基于字节的,内部有byte array作buf。
当用BufferedReader读数据时,是从buf中读,当buf为空时,不管是否需要都填满buf、用BufferedWriter时,把要写的数据先写在buf中,当buf满了或者显式的调用了flush时才往underlying stream或者其他target里写入。两者都会提高读写速度。
public BufferedReader(Reader in, int bufferSize)
public BufferedReader(Reader in)
public BufferedWriter(Writer out)
public BufferedWriter(Writer out, int bufferSize)默认bufferSize的大小是8k。
BufferedWriter添加了一个超类没有的方法newLine(),会依据平台在stream末尾添加line determines。Unix,Mac /n linefeed,Windows /r/n 。因为一般网络协议会指定行分隔符,所以在网络程序中不要使用该方法,要显式的添加协议要求的line determines,
本文介绍了Java中的IO流概念,重点讲解了Reader和Writer类的重要子类InputStreamReader和OutputStreamWriter的功能及使用方法。此外还详细解释了FileReader、FileWriter等类的应用场景,以及BufferedReader、BufferedWriter等缓冲流的工作原理。
290

被折叠的 条评论
为什么被折叠?



