java IO流之InputStreamReader OutputStreamWriter 转换流
- 作用:将字节流和字符流进行转换。
- 转换流属于字符流
- InputStreamReader :字节输入流 -->字符的输入流
- OutputStreamWriter : 字符输出流 -->字节的输出流
InputStreamReader
-
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
-
每次调用 InputStreamReader 中的一个
read()
方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。 -
为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
构造方法摘要
- InputStreamReader(InputStream in[, Charset cs])
- 创建使用给定(未指定则使用默认字符集)字符集的 InputStreamReader
- InputStreamReader(InputStream in, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。- InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
方法
Modifier and Type | Method | Description |
---|---|---|
void | close() | 关闭该流并释放与之关联的所有资源。 |
String | getEncoding() | 返回此流使用的字符编码的名称。 |
int | read() | 读取单个字符。 |
int | read(char[] cbuf, int offset, int length) | 将字符读入数组中的某一部分。 |
boolean | ready() | 判断此流是否已经准备好用于读取。 |
int | read(char[] cbuf) | 将字符读入数组。 |
int | read(CharBuffer target) | 试图将字符读入指定的字符缓冲区。 |
long | skip(long n) | 跳过n个字符。 |
void | reset() | 重置该流。 |
void | mark(int readAheadLimit) | 标记流中的当前位置。 |
boolean | markSupported() | 判断此流是否支持 mark() 操作。 |
- 从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
OutputStreamWriter
-
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
-
每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。
-
为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
-
代理对surrogate pair是一个字符,它由两个
char
值序列表示:高 high代理项的范围为 ‘\uD800’ 到 ‘\uDBFF’,后跟范围为 ‘\uDC00’ 到 ‘\uDFFF’ 的低 low 代理项。错误代理元素malformed surrogate element 指的是后面不跟低代理项的高代理项,或前面没有高代理项的低代理项。 此类总是使用字符集的默认替代序列 替代错误代理元素和不可映射的字符序列。如果需要更多地控制编码过程,则应该使用 CharsetEncoder 类。
构造方法摘要
OutputStreamWriter(OutputStream out[, Charset cs])
创建使用给定(未指定则使用默认字符集)字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
创建使用给定字符集编码器的 OutputStreamWriter。
OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter。
方法
Modifier and Type | Method | Description |
---|---|---|
void | close() | 关闭此流,但要先刷新它。 |
void | flush() | 刷新该流的缓冲。 |
String | getEncoding() | 返回此流使用的字符编码的名称。 |
void | write(char[] cbuf, int off, int len) | 写入字符数组的某一部分。 |
void | write(int c) | 写入单个字符。 |
void | write(String str, int off, int len) | 写入字符串的某一部分。 |
void | write(char[] cbuf) | 写入字符数组cbuf。 |
void | write(String str) | 写入字符串str。 |
Write | append(char c) | 将指定字符c添加到此 writer。 |
Writer | append(CharSequence csq) | 将指定字符序列csq添加到此 writer。 |
Writer | append(CharSequence csq, int start, int end) | 将指定字符序列的子序列添加到此 writer。 |
- 从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
分步实现
以复制文件为例
-
源文件目标文件创建实例
//1.源文件目标文件创建实例 File f1 = new File("d:\\Test.txt")