java字节流与字符流

 

流是一个有序的字节或字符序列,可作为一个输入源,也可作为一个输出的目的地。

 
字节流以字节为单位输入输出,字节流类名含有stream;

 

字符流以字符为单位输入输出,字符流类名含有reader或writer.

 

为了通用性,java中字符是16位的unicode字符,所以8位的字节流必须和16位的字符流进行转换。

 

字节流到字符流的转换使用InputStreamReader类:


public InputStreamReader(InputStream in);
public InputStreamReader(InputStream in,String encoding);

 

字符流到字节流的转换使用OuputStreamWriter类:

 
public OuputStreamWriter(OnputStream in);
public OnputStreamWriter(OnputStream in,String encoding);

 


Reader和Writer类允许用户在程序中无缝的支持国际字符集,如果要读取的文件是别国语言,要使用字符流。

JavaI/O字节流与字符流就是java实现输入/输出数据。

 

字节流是一个字节一个字节的输入/输出数据 (两个字节组成一个汉字)所以在用字节流读一串汉字时会出现乱码问题,可采用字符流进行读取。

 


同样字符流是一个字符一个字符的输入/输出数据(一个字符=两个字节)所以用字符流读一串汉字可以解决乱码问题,同时它也兼顾了英文,这是由unicode的编码规则决定的,因为中文的unicode字符有特殊标识。

 

 

 读取: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(File file), "UTF-8"));

 

写入: BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(File file), "UTF-8"));

 

不包BufferedWriter和BufferedReader一层,也可以达到解决中文乱码问题的目的.

 

参考下面J2SE6中关于 InputStreamReader 和 OutputStreamWriter 的解析

*************************************************************

public class InputStreamReader extends Reader

  InputStreamReader 是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

  每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

  为了达到最高效率,可考虑在BufferedReader内包装InputStreamReader。例如:

  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

*******************************************************************

public class OutputStreamWriter extends Writer

  OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

  每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给write() 方法的字符没有缓冲。

  为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:

  Writer out = new BufferedWriter(new OutputStreamWriter(System.out)); 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值