文章目录
- 1. 相关概念
- 2. 转换输入流
- 3. 转换输出流
1. 相关概念
转换流提供了在字节流和字符流之间的转换。
Java API 提供了两个转换流:
InputStreamReader
和 OutputStreamWriter
当字节流中的数据都是字符时,转成字符流操作更高效。
InputStreamReader
:
用于将字节流中读取到的字节按指定字符集解码成字符。需要和FileInputStream
“ 套接”。
OutputStreamWriter
:
用于将要写入到字节流中的字符按指定字符集编码成字节。 需要和 FileOutputStream
“ 套接”。
2. 转换输入流
举例:
将tt5.txt文件中的内容输出到控制台。其中tt5.txt里面的内容是“会当凌绝顶”。
package day13;
import java.io.FileInputStream;
import java.io.InputStreamReader;
/**
* 转换流
* 可以把字节流转换为字符流
* 当字节流中的数据都是字符的时候,使用转换流转为字符流处理效率更高
* @author 14532
*/
public class Test2 {
public static void main(String[] args) {
//所有的文件都是有编码格式的
//对于我们来说,txt和java文件一般来讲有三种编码
//ISO8859-1,西欧编码,是纯粹英文编码,不适应汉字
//GBK和UTF-8,这两编码是适用于中文和英文
//我们一般使用UTF-8编码
try {
Test2.testInputStreamReader();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 转换输入流为字符输入流
* 在转换字符流的时候,设置的字符集编码要与读取的文件的数据编码格式一致,不然就会出现乱码
* InputStreamReader
*/
public static void testInputStreamReader() throws Exception{
FileInputStream fs = new FileInputStream("D:\\java_doc\\eclipse-workspace\\demo\\src\\day13\\tt5.txt");
//把字节流转换为字符流
InputStreamReader in = new InputStreamReader(fs, "UTF-8");//参数1是字节流,参数2是编码格式
char[] c = new char[100];
int len = 0;
while((len = in.read(c)) != -1) {
System.out.println(new String(c, 0, len));
}
in.close();
fs.close();
}
}
运行结果:
3. 转换输出流
举例:
将“你好你好”字符串输出到tt6.txt文件中
package day13;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Test2 {
public static void main(String[] args) {
//所有的文件都是有编码格式的
//对于我们来说,txt和java文件一般来讲有三种编码
//ISO8859-1,西欧编码,是纯粹英文编码,不适应汉字
//GBK和UTF-8,这两编码是适用于中文和英文
//我们一般使用UTF-8编码
try {
// Test2.testInputStreamReader();
Test2.testOutputStreamWriter();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 转换字节输出流为字符输出流
* 在转换字符流的时候,设置的字符集编码要与读取的文件的数据编码格式一致,不然就会出现乱码
* OutputStreamWriter
*/
public static void testOutputStreamWriter() throws Exception{
FileOutputStream out = new FileOutputStream("D:\\java_doc\\eclipse-workspace\\demo\\src\\day13\\tt6.txt");
OutputStreamWriter os = new OutputStreamWriter(out, "UTF-8");
os.write("你好你好");
os.flush();
os.close();
out.close();
}
}