黑马程序员技术交流社区

标题: DataInputStream的readChar()也会读出来的数据也有乱码?? [打印本页]

作者: 归☆夜↑『    时间: 2013-5-29 22:52
标题: DataInputStream的readChar()也会读出来的数据也有乱码??
本帖最后由 归☆夜↑『 于 2013-6-1 05:54 编辑

readChar()方法不是以字符为单位读取数据的吗 怎么还会有乱码?
  1. public class TestDataIns{
  2.   public static void main(String[] args) {
  3.         FileInputStream fi = new FileInputStream("f://test.txt");//test.txt文件储存的全是中文字符
  4.           DataInputStream ds = new DataInputStream(fi);
  5.                                }
  6.                         System.out.println(ds.readChar());//读取一个字符,结果输出了一个乱码
  7. }
复制代码
请问这是何解呢,,难道读出的字符后还被分解了吗???请教大家!!!!
作者: 刘勇强    时间: 2013-5-29 23:34
本帖最后由 刘勇强 于 2013-5-29 23:41 编辑

DataInputStream  的  char readChar()  方法 定义: 参见 DataInput 的 readChar 方法的常规协定。


DataInput  中, char readChar()   读取输入流中的两个输入字节并返回一个 char 值

你看看你的文件中能否保证俩字节正好是一个标准汉字字符



而且api文档定义中有这么一句:DataInput 和 DataOutput 接口的实现表示稍作改版的 UTF-8 格式的 Unicode 字符串。(

这中编码中的不同范围的字符分别用 单个字节   2个字节  3个字节 表示. 不知道是否跟这个也有关系. 如果是的话,你用 readChar()  读俩字节是无法保证正好是个字符的. 这里我也不懂   同问.



作者: 刘国强    时间: 2013-5-29 23:35
本帖最后由 刘国强 于 2013-5-30 00:11 编辑

在API文档中找到这个方法,可以发现


该类是实现了接口 DataInput 中的readChar()方法
查阅DataInput接口的API文档发现,
DataInput 接口用于从二进制流中读取字节,并根据所有 Java 基本类型数据进行重构。同时还提供根据 UTF-8修改版格式的数据重构 String 的工具。


UTF-8修改版与UTF-8 的编码并不一样

进一步查找接口 DataInput 中的readChar()方法
可以再方法说明中看到这样一句话此方法适用于读取用接口 DataOutput 的 writeChar 方法写入的字节。

而楼主读取的时候并不是用这两种方式进行编码,所以会出现读取后显示出现问题




作者: 归☆夜↑『    时间: 2013-5-30 08:52
如果文件的文本是通过DataOutputStream写入的读取就不会出现乱码了 ! 这么解??
作者: 刘国强    时间: 2013-5-30 17:02
个人理解应该这么解,具体的楼主可以测试一下,
作者: 刘胜寒    时间: 2013-5-31 00:45
如果问题以解决,请结贴,未解决追加提问。谢谢合作
作者: 归☆夜↑『    时间: 2013-5-31 12:18
刘胜寒 发表于 2013-5-31 00:45
如果问题以解决,请结贴,未解决追加提问。谢谢合作

额~~没结过呢!怎么结帖???
作者: Sword    时间: 2013-5-31 23:53
归☆夜↑『 发表于 2013-5-31 12:18
额~~没结过呢!怎么结帖???

建议你看一下这个帖子,希望对你有所帮助::)

http://bbs.itheima.com/thread-49464-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2