当前位置:编程学习 > JAVA >>

关于字符流转字节流的问题,茶米油盐备齐了,大婶们速来指教

字符流转字节流的对象是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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,