Java IO: InputStreamReader和OutputStreamWriter
作者: 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
Java IO: InputStreamReader和OutputStreamWriter的更多相关文章
- 【java】io流之字节流转为字符流:java.io.OutputStreamWriter和java.io.InputStreamReader
package 文件操作; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...
- 转换流读写操作 java.io.OutputStreamWriter ,java.io.InputStreamReader
package seday07; import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStr ...
- Java IO教程
1 Java IO 教程 2 Java IO 概述 3 Java IO: 文件 4 Java IO: 管道 5 Java IO: 网络 6 Java IO: 字节和字符数组 7 Java IO: S ...
- Java IO 学习总结 学习手册总结
Java IO 是一套Java用来读写数据(输入和输出)的API.大部分程序都要处理一些输入,并由输入产生一些输出.Java为此提供了java.io包. 代码 github地址:https://git ...
- java io系列21之 InputStreamReader和OutputStreamWriter
InputStreamReader和OutputStreamWriter 是字节流通向字符流的桥梁:它使用指定的 charset 读写字节并将其解码为字符.InputStreamReader 的作用是 ...
- Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
类的继承关系 Reader |__ BufferedReader.StringReader.InputStreamReader |__ FileReader Writer |__ BufferedWr ...
- java基础知识回顾之javaIO类---InputStreamReader和OutputStreamWriter转化流
InputStreamReader:是字节流通向字符流的桥梁: OutputStreamWriter 是字符流通向字节流的桥梁: package com.lp.ecjtu; import java.i ...
- J07-Java IO流总结七 《 InputStreamReader和OutputStreamWriter 》
前面在介绍FileReader和FileWriter的时候有说到,FileReader的读取字符功能,以及FileWriter的写出字符的功能,都不是它们自己实现的,而是,它们分别继承了InputSt ...
- io流之转换流InputStreamReader、OutputStreamWriter
例子程序: package io; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.File ...
随机推荐
- 2020/1/27代码审计学习之SQL注入漏洞
PHP代码审计SQL注入漏洞 0x00 首先明确什么是SQL注入,SQL语句必须掌握. 常见的注入总的来说可以分为两大类:数字型和字符型. 这两类中包含了诸如报错注入,宽字节注入,盲注,二次注入,co ...
- UITableViewCell 的selectedBackgroundView
UITableViewCell中的selectedBackgroundView就是用于当用户点击cell的时候,选择状态的view,你可以对这个view进行颜色或者其他样式等做一些定制,可以达到点击之 ...
- 23. docker 数据持久化 bind mounting
1. bind mounting 和 data volume 的区别 data volume 需要在 Dockerfile 定义 Volume bind mounting 只需要 -v 指明 容器外部 ...
- 什么?你还没女朋友?教你如何借助Python俘获女孩子芳心!
天气降温,感情却升温了? 上午刚到公司,就收到小Q发来的灵魂拷问: “Q仔!要不然下午请个假!我带你去精神科看看!?”我实在忍不了,脱口而出. 话音未落,前排的运营小花回头看向小Q,莞尔一笑,百媚横生 ...
- Struts 2的下载和安装
一.为Web应用增加Struts 2支持 下载和安装Struts 2步骤: 登录http://struts.apache.org/download.cgi站点,下载Struts 2的最新版,下载时有以 ...
- Storm 重启排查
Storm实战常见问题及解决方案 https://www.cnblogs.com/catkins/p/5302634.html Storm 重启排查(续) https://www.iteye.com/ ...
- 使用Eclipse开发学习 Spring Boot 教程的内容小结
spring-tool-suite使用教程,并创建spring配置文件 Spring Boot基础教程1-Spring Tool Suite工具的安装 Spring Boot基础教程2-RESTful ...
- UML-逻辑架构和包图-概述
回顾前几章学习了用例模型,本章开始学习设计模型.
- Python执行JS -- PyExecJS库
pip install PyExecJS 查看执行JS的环境 print(execjs.get().name) 返回值:JScript windows 默认执行JS的环境 返回值:Node.js (V ...
- 一、Cookie和Session介绍
会话跟踪 1. 什么是会话 * 用户拨打10086,从服务台接通后会话开始: * 用户发出话费查询请求,服务台响应.这是该会话中的一个请求: * 用户发出套餐变更请求,服务台响应.这是该会话中的 ...