PrintStream主要操作byte流,而PrintWriter用来操作字符流。读取文本文件时一般用后者。

解决方案 »

  1.   

    这是写入,不是读取啊,PrintStream也能println(String);啊,String 不是字符流吗?
      

  2.   

    java的一个字符(char)是16bit的,一个BYTE是8bit的
    PrintStrean是写入一串8bit的数据的。
    PrintWriter是写入一串16bit的数据的。
    String缺省是用UNICODE编码,是16bit的。因此用PrintWriter写入的字符串,跨平台性好一些吧。
    PrintStream的可能会出现字符集乱码吧。
      

  3.   

    那就是说PrintWriter是一次写16bit,而PrintStream是一次写8bit???
      

  4.   

    可我还不明白啊,操作系统用的又不是Unicode,总不能把字节流输出给操作系统吧???
      

  5.   

    可我还不明白啊,操作系统用的又不是Unicode,总不能把字符流输出给操作系统吧???
    前面打错了
      

  6.   

    你可以这样理解,
    PrintStream是用来操作byte,
    PrintWriter是用来操作Unicode,
    一般需要处理中文时用PrintWriter好了
      

  7.   

    你的满意答案是什么?
    是printWriter有什么用??通过楼上几位的回答已经得出来了。
    PrintWriter在操作Unicode时候强于PrintStream.(用printStream处理的时候有可能出乱码)
      

  8.   

    比如这个:
    System.out.println("aa");
    和这个:
    PrintWriter out = new PrintWriter(System.out);
    out.println("aa");
    out.flush();他们的内部实现有什么不同呢?
    PrintWriter是一次写16bit,而PrintStream是一次写8bit吗?
    那么我在DOS里看到的"aa",第一个不是Unicode,第二个是Unicode???
      

  9.   

    Stream用于二进制文件(非文本)
    Writer/Reader用于文本文件(虽然也是二进制,不过是按照一定的字符编码规则,不像前者)当然Stream也可用于文本,只不过比writer/reader来的麻烦你如果用过UltraEdit就能更好的理解,用文本模式可以读文本,用二进制(或16进制)模式显示的都是些数字
      

  10.   

    请问源码哪里可以下啊,我到sun的网站上转了一圈都没找到
      

  11.   

    请问Stream和Writer只是处理方式上的不同吗?他们处理的最终结果还是相同的吧?
    那为什么PrintStream还会乱码呢?还有,JAVA内部存储字符是用Unicode,而操作系统不是Unicode,是不是Java的PrintWriter/Stream还有个功能是要把Unicode转换成操作系统的字符格式呢?就这两点疑问了,谢谢,大家不要给我讲Reader和Writer的原理了,只要直接回答我的问题就可以了,谢谢
      

  12.   

    ----------那为什么PrintStream还会乱码呢?
    据我理解PrintStream一次读8bit的话,如果遇到汉字(一个汉字占16bit),就可能会出现乱码。
      

  13.   

    PrintStream主要操作byte流,而PrintWriter用来操作字符流。读取文本文件时一般用后者。
      

  14.   

    PrintStream操作byte,PrintWriter操作Unicode字符,
      

  15.   

    ×××××××××××××××××××××××××××××××××××××××××××
     回复人: nivaini(nivaini) ( ) 信誉:100  2005-1-31 9:28:26  得分: 0  
       
    可我还不明白啊,操作系统用的又不是Unicode,总不能把字节流输出给操作系统吧???
     ×××××××××××××××××××××××××××××××××××××××××××我不知道所有的操作系统用什么,不过Windows我看过资料,它的API内部都是用Unicode的。
     
      

  16.   

    ×××××××××××××××××××××××××××××××××××××××××××
    比如这个:
    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个英文字母,所有字符集都有映射,这样英文到处都不会出现乱码,而中文则在无中文字符集的机器上显示为?号。
      

  17.   

    那为什么PrintStream还会乱码呢?你的“你好”,按照byte传入,没有经过映射,这样在有些机器上就可能出现乱码。或者说你传入了按照字节编码的“你好”,显示的地方按照unicode来解码,则完全可能出现乱码。
    不然你可以试试 不用String来构造一个 “你好”的字节数数组,然后试试看。
      

  18.   

    非常感谢lhj(努力加油) ,我学到了很多东西