关于字符流转字节流的问题,茶米油盐备齐了,大婶们速来指教
字符流转字节流的对象是OutputStreamWriter类可是OutputStreamWriter类是字符流Writer的子类,他的构造函数接受的却是一个字节流OutputStream
这样最后调用的不还是字符流对象的方法么?
这样为什么还是字符转字节?明明就是转了一个字节流对象进去,变成了一个字符流对象。。。
好纠结。。。。。。
--------------------编程问答--------------------
import java.io.*;
public class OutputStreamWriterTest
{
public static void main(String[] args)
{
try(
Writer w
= new OutputStreamWriter(new FileOutputStream("1.txt"));
)
{
w.write("hello kitty");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
这段能看懂吧?
最后产生一个1.txt,里面写的hello Kitty 而且使用GBK编码。
1、FileOutputStream 是一个byte streams (父类是OutputStream)
2、w.write(“hello kitty”);写入的是啥? 字符串对吧? 不是写的byte[] 对吧?
3、结论,源文档API说的是 “字符流与字节流之间的桥梁” 没有说啥转换。 真实情况是:
writer方法字符串将写入了到字符流。
OutputstreamWriter 将字符流进行编码(encodee 默认用系统平台的编码方式,我系统默认是GBK)这时候得到的是 一堆的byte[]
然后将byte[]写入到 FileOutputStream
即FileOutputStream 是一个接受字节流的容器。只接受字节流。
你明明输入的一个字符串,FileOutputStream 却成功的得到了byte[]
这就是所谓的转换。
本质上:
String s --->Btye[]---->输出到字节流中去
只不过你看到的效果是 s---->字节流中有东西了。
中间过程,java给你封装了。
如果你需要比较原始的效果,应该这么写
String s = "hello balance";
try(
FileOutputStream f = new FileOutputStream("2.txt");
)
{
//用默认的字符集编码,本系统默认GBK
//如果指定字符集要用 s.getBytes("UTF-8");之类
byte[] bianrys = s.getBytes("GBK");
f.write(bianrys);
}
catch(Exception e)
{
e.printStackTrace();
}
--------------------编程问答-------------------- 数据归根到底写入文件都是用的字节流,字符流只是为了方便操作而产生的
补充:Java , Java SE