解决方案 »

  1.   

    你用的是DataOutputStream字节输出流写到Data.txt文件里的,写进去的不是字符。用OutputStreamWriter字符输入应该是可以的。
      

  2.   

    DataOutputStream输出的不是字符流,生成的不是文本文件,怎么可以按文本文件查看
    用DataInputStream读当然没有问题了
      

  3.   

    Thinking in JAVA里面看来的吧
    DataOutputStream是面向字节而不是面向字符的,如何用正常的文本阅读器读?
    writeFloat,writeDouble是用IEEE754浮点数标准编码的
    writeUTF是用Modified UTF-8编码的
      

  4.   

    DataOutputStream输出的是字节流,你仔细去网上搜下关于这个类的使用和介绍。也可以看下API关于这个类的介绍。
    这个流中的每一个方法写入文件的字节都是不相同的,比如writeChars(char c)是将这个字符的两个字节都写入文件中,比如writeChars('a'),a对应的是十进制是97,对于的16进制是61,也就是说写入的是 00 61,如果是writeBytes写入呢?则是将每个字符的低字节内容写入目标设备中,也就是  61 ,因为一个字符由两个字节组成,前面是高,后面是低。而为什么控制台输出又是正确的呢?因为你又使用了同样的readxxx()方法读了回来,相当于,我加密了一段密文情书发给女神,又告诉了女神解密的方法,女神就能读懂我的情书了,然后果断拒绝了我。但是我如果没告诉她解密的方法呢?她心里会想,屌丝,真特么无聊。然后和高富帅去啪啪啪。这样,你使用txt一个文本文件工具打开,没法按照工具认为的编码方式去读取数据,所以就会像你所说的乱码。如果不懂,可以继续问我。
      

  5.   

    那FileOutputStream也是输出的字节流,为什么用的时候控制台与文件都不会乱码呢?
      

  6.   

    应该是 DataOutputStream 会将数据字节 进行转换 
    也许乱码 是因为内容成为了utf-16
    而好比 writeLong(long)
    FileOutputStream write always byte
      

  7.   


    楼主你还是看看  API对这两个类的 解释。。