c2 Streams Readers and Writers

最重要的两个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 IOException

write(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,


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值