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

我们一起炸过的大便 2013-05-26 01:46:00
字符流转字节流的对象是OutputStreamWriter类
可是OutputStreamWriter类是字符流Writer的子类,他的构造函数接受的却是一个字节流OutputStream
这样最后调用的不还是字符流对象的方法么?

这样为什么还是字符转字节?明明就是转了一个字节流对象进去,变成了一个字符流对象。。。
好纠结。。。。。。
...全文
126 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小绵羊 2013-05-28
  • 打赏
  • 举报
回复
数据归根到底写入文件都是用的字节流,字符流只是为了方便操作而产生的
n27741 2013-05-26
  • 打赏
  • 举报
回复

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();
		}
		

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧