PrintWriter和PrintStream有什么区别? PrintStream主要操作byte流,而PrintWriter用来操作字符流。读取文本文件时一般用后者。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是写入,不是读取啊,PrintStream也能println(String);啊,String 不是字符流吗? java的一个字符(char)是16bit的,一个BYTE是8bit的PrintStrean是写入一串8bit的数据的。PrintWriter是写入一串16bit的数据的。String缺省是用UNICODE编码,是16bit的。因此用PrintWriter写入的字符串,跨平台性好一些吧。PrintStream的可能会出现字符集乱码吧。 那就是说PrintWriter是一次写16bit,而PrintStream是一次写8bit??? 可我还不明白啊,操作系统用的又不是Unicode,总不能把字节流输出给操作系统吧??? 可我还不明白啊,操作系统用的又不是Unicode,总不能把字符流输出给操作系统吧???前面打错了 你可以这样理解,PrintStream是用来操作byte,PrintWriter是用来操作Unicode,一般需要处理中文时用PrintWriter好了 你的满意答案是什么?是printWriter有什么用??通过楼上几位的回答已经得出来了。PrintWriter在操作Unicode时候强于PrintStream.(用printStream处理的时候有可能出乱码) 比如这个:System.out.println("aa");和这个:PrintWriter out = new PrintWriter(System.out);out.println("aa");out.flush();他们的内部实现有什么不同呢?PrintWriter是一次写16bit,而PrintStream是一次写8bit吗?那么我在DOS里看到的"aa",第一个不是Unicode,第二个是Unicode??? Stream用于二进制文件(非文本)Writer/Reader用于文本文件(虽然也是二进制,不过是按照一定的字符编码规则,不像前者)当然Stream也可用于文本,只不过比writer/reader来的麻烦你如果用过UltraEdit就能更好的理解,用文本模式可以读文本,用二进制(或16进制)模式显示的都是些数字 请问源码哪里可以下啊,我到sun的网站上转了一圈都没找到 请问Stream和Writer只是处理方式上的不同吗?他们处理的最终结果还是相同的吧?那为什么PrintStream还会乱码呢?还有,JAVA内部存储字符是用Unicode,而操作系统不是Unicode,是不是Java的PrintWriter/Stream还有个功能是要把Unicode转换成操作系统的字符格式呢?就这两点疑问了,谢谢,大家不要给我讲Reader和Writer的原理了,只要直接回答我的问题就可以了,谢谢 ----------那为什么PrintStream还会乱码呢?据我理解PrintStream一次读8bit的话,如果遇到汉字(一个汉字占16bit),就可能会出现乱码。 PrintStream主要操作byte流,而PrintWriter用来操作字符流。读取文本文件时一般用后者。 PrintStream操作byte,PrintWriter操作Unicode字符, ××××××××××××××××××××××××××××××××××××××××××× 回复人: nivaini(nivaini) ( ) 信誉:100 2005-1-31 9:28:26 得分: 0 可我还不明白啊,操作系统用的又不是Unicode,总不能把字节流输出给操作系统吧??? ×××××××××××××××××××××××××××××××××××××××××××我不知道所有的操作系统用什么,不过Windows我看过资料,它的API内部都是用Unicode的。 ×××××××××××××××××××××××××××××××××××××××××××比如这个:System.out.println("aa");和这个:PrintWriter out = new PrintWriter(System.out);out.println("aa");out.flush();他们的内部实现有什么不同呢?PrintWriter是一次写16bit,而PrintStream是一次写8bit吗?那么我在DOS里看到的"aa",第一个不是Unicode,第二个是Unicode??? ×××××××××××××××××××××××××××××××××××××××××××你在dos里面看到aa,都是ascii码,你的源代码首先根据系统的编码,保存成java文件,编译的时候,“aa”会被转码成为UTF格式,就是unicode text fomat。在println后,操作系统的显示会在把UTF转换成本地的字符编码显示给你看。如果 你把aa换成GBK的“你好”这样编译后,你换到一台繁体中文的电脑上执行后就可以显示繁体的“你好”,这样才显示处java和unicode的优越性,不知楼主是否能明白了。 ×××××××××××××××××××××××××××××××××××××××××××请问Stream和Writer只是处理方式上的不同吗?他们处理的最终结果还是相同的吧?那为什么PrintStream还会乱码呢?还有,JAVA内部存储字符是用Unicode,而操作系统不是Unicode,是不是Java的PrintWriter/Stream还有个功能是要把Unicode转换成操作系统的字符格式呢?就这两点疑问了,谢谢,大家不要给我讲Reader和Writer的原理了,只要直接回答我的问题就可以了,谢谢 ×××××××××××××××××××××××××××××××××××××××××××不同的国家有不用的语言,有不同的字符集,操作系统内部有些就是采用unicode,只不过呈现给最终用户看到的一定是你能够看明白的编码而已,java内部存储的unicode最终要显示就要转化为各个国家的字符集,只要这些字符集能够映射到unicode,就可以在不同的字符集之间转化。最简单的就是26个英文字母,所有字符集都有映射,这样英文到处都不会出现乱码,而中文则在无中文字符集的机器上显示为?号。 那为什么PrintStream还会乱码呢?你的“你好”,按照byte传入,没有经过映射,这样在有些机器上就可能出现乱码。或者说你传入了按照字节编码的“你好”,显示的地方按照unicode来解码,则完全可能出现乱码。不然你可以试试 不用String来构造一个 “你好”的字节数数组,然后试试看。 非常感谢lhj(努力加油) ,我学到了很多东西 如何查找一个物化视图是在哪些表的基础上创建的? 怎么动态调整画布大小。 100 分 java 窗口图标 不能改变 怎样开发自己的jsp页面 标签?哪里有资料? RE: JScrollPane滚动条位置问题? 怎么在catch到SocketException时把socket给close? LinkList实现的是单链表还是双链表? 如何搭建java开发环境? 一个关于静态的问题 苦闷!放完假回来不想做事情了! nio读写的问题:服务器发送两次消息,客户端读取时会获得两条消息的叠加 关于FILTER
PrintStrean是写入一串8bit的数据的。
PrintWriter是写入一串16bit的数据的。
String缺省是用UNICODE编码,是16bit的。因此用PrintWriter写入的字符串,跨平台性好一些吧。
PrintStream的可能会出现字符集乱码吧。
前面打错了
PrintStream是用来操作byte,
PrintWriter是用来操作Unicode,
一般需要处理中文时用PrintWriter好了
是printWriter有什么用??通过楼上几位的回答已经得出来了。
PrintWriter在操作Unicode时候强于PrintStream.(用printStream处理的时候有可能出乱码)
System.out.println("aa");
和这个:
PrintWriter out = new PrintWriter(System.out);
out.println("aa");
out.flush();他们的内部实现有什么不同呢?
PrintWriter是一次写16bit,而PrintStream是一次写8bit吗?
那么我在DOS里看到的"aa",第一个不是Unicode,第二个是Unicode???
Writer/Reader用于文本文件(虽然也是二进制,不过是按照一定的字符编码规则,不像前者)当然Stream也可用于文本,只不过比writer/reader来的麻烦你如果用过UltraEdit就能更好的理解,用文本模式可以读文本,用二进制(或16进制)模式显示的都是些数字
那为什么PrintStream还会乱码呢?还有,JAVA内部存储字符是用Unicode,而操作系统不是Unicode,是不是Java的PrintWriter/Stream还有个功能是要把Unicode转换成操作系统的字符格式呢?就这两点疑问了,谢谢,大家不要给我讲Reader和Writer的原理了,只要直接回答我的问题就可以了,谢谢
据我理解PrintStream一次读8bit的话,如果遇到汉字(一个汉字占16bit),就可能会出现乱码。
回复人: nivaini(nivaini) ( ) 信誉:100 2005-1-31 9:28:26 得分: 0
可我还不明白啊,操作系统用的又不是Unicode,总不能把字节流输出给操作系统吧???
×××××××××××××××××××××××××××××××××××××××××××我不知道所有的操作系统用什么,不过Windows我看过资料,它的API内部都是用Unicode的。
比如这个:
System.out.println("aa");
和这个:
PrintWriter out = new PrintWriter(System.out);
out.println("aa");
out.flush();他们的内部实现有什么不同呢?
PrintWriter是一次写16bit,而PrintStream是一次写8bit吗?
那么我在DOS里看到的"aa",第一个不是Unicode,第二个是Unicode???
×××××××××××××××××××××××××××××××××××××××××××你在dos里面看到aa,都是ascii码,你的源代码首先根据系统的编码,保存成java文件,编译的时候,“aa”会被转码成为UTF格式,就是unicode text fomat。在println后,操作系统的显示会在把UTF转换成本地的字符编码显示给你看。如果 你把aa换成GBK的“你好”这样编译后,你换到一台繁体中文的电脑上执行后就可以显示繁体的“你好”,这样才显示处java和unicode的优越性,不知楼主是否能明白了。
×××××××××××××××××××××××××××××××××××××××××××请问Stream和Writer只是处理方式上的不同吗?他们处理的最终结果还是相同的吧?
那为什么PrintStream还会乱码呢?还有,JAVA内部存储字符是用Unicode,而操作系统不是Unicode,是不是Java的PrintWriter/Stream还有个功能是要把Unicode转换成操作系统的字符格式呢?就这两点疑问了,谢谢,大家不要给我讲Reader和Writer的原理了,只要直接回答我的问题就可以了,谢谢 ×××××××××××××××××××××××××××××××××××××××××××不同的国家有不用的语言,有不同的字符集,操作系统内部有些就是采用unicode,只不过呈现给最终用户看到的一定是你能够看明白的编码而已,java内部存储的unicode最终要显示就要转化为各个国家的字符集,只要这些字符集能够映射到unicode,就可以在不同的字符集之间转化。最简单的就是26个英文字母,所有字符集都有映射,这样英文到处都不会出现乱码,而中文则在无中文字符集的机器上显示为?号。
不然你可以试试 不用String来构造一个 “你好”的字节数数组,然后试试看。