作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

本章节将简要介绍InputStreamReader和OutputStreamWriter。细心的读者可能会发现,在之前的文章中,IO中的类要么以Stream结尾,要么以Reader或者Writer结尾,那这两个同时以字节流和字符流的类名后缀结尾的类是什么用途呢?简单来说,这两个类把字节流转换成字符流,中间做了数据的转换,类似适配器模式的思想。

InputStreamReader

原文链接

InputStreamReader会包含一个InputStream,从而可以将该输入字节流转换成字符流,代码例子:

01 InputStream inputStream = new FileInputStream("c:\\data\\input.txt");
02  
03 Reader reader = new InputStreamReader(inputStream);
04  
05 int data = reader.read();
06  
07 while(data != -1){
08  
09     char theChar = (char) data;
10  
11     data = reader.read();
12  
13 }
14  
15 reader.close();

注意:为了清晰,代码忽略了一些必要的异常处理。想了解更多异常处理的信息,请参考Java IO异常处理。

read()方法返回一个包含了读取到的字符内容的int类型变量(译者注:0~65535)。代码如下:

1 int data = reader.read();

你可以把返回的int值转换成char变量,就像这样:

1 char aChar = (char) data; //译者注:这里不会造成数据丢失,因为返回的int类型变量data只有低16位有数据,高16位没有数据

如果方法返回-1,表明Reader中已经没有剩余可读取字符,此时可以关闭Reader。-1是一个int类型,不是byte或者char类型,这是不一样的。

InputStreamReader同样拥有其他可选的构造函数,能够让你指定将底层字节流解释成何种编码的字符流。例子如下:

1 InputStream inputStream = new FileInputStream("c:\\data\\input.txt");
2  
3 Reader reader = new InputStreamReader(inputStream, "UTF-8");

注意构造函数的第二个参数,此时该InputStreamReader会将输入的字节流转换成UTF8字符流。

OutputStreamWriter

原文链接

OutputStreamWriter会包含一个OutputStream,从而可以将该输出字节流转换成字符流,代码如下:

1 OutputStream outputStream = new FileOutputStream("c:\\data\\output.txt");
2  
3 Writer writer = new OutputStreamWriter(outputStream);
4  
5 writer.write("Hello World");
6  
7 writer.close();

OutputStreamWriter同样拥有将输出字节流转换成指定编码的字符流的构造函数。

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java IO: InputStreamReader和OutputStreamWriter

最新文章

  1. 微信共享收货地址 edit_address:fail 吐白沫级解决方案
  2. android常用调试工具fiddle、wireshark和android studio的配置
  3. HFSS设计导入AD中
  4. nexus中央仓库中发布自己的jar包
  5. Android 定制下拉刷新头部 Ultra Pull To Refresh
  6. Java基础知识强化之集合框架笔记73:如何选择使用哪种集合
  7. Duff in Love - 588B(素数的判断)
  8. 三组I/O复用模型的比较
  9. Java批处理操作
  10. Python 终端输出字体颜色
  11. CSS3 之 Media(媒体查询器)
  12. myclipse里有感叹号的问题,希望可以帮到各位
  13. 理解微信小程序的生命周期和运行原理
  14. 强大log
  15. 《Mysql DML语句》
  16. Java多线程-----线程安全及解决机制
  17. mongodb副本集修改配置问题
  18. .NET 简单导出CSV文件
  19. HDU 1281 - 棋盘游戏 - [二分图最大匹配]
  20. freeRadius与NetGear WNAP210的简使用

热门文章

  1. PAT A1005-1008
  2. Java中的四种引用类型比较
  3. CAR-T|Single cell plan|Extracellular RNA|
  4. vue 动画框架Animate.css @keyframes
  5. 01Java-方法
  6. 将hello程序作为驱动程序编译进系统内核
  7. 梯度消失、梯度爆炸以及Kaggle房价预测
  8. 《Docekr入门学习篇》——Docker简介
  9. VCRedist_x86.exe Vcredist_x64.exe
  10. The mplot3d Toolkit