A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 归☆夜↑『 于 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. }
复制代码
请问这是何解呢,,难道读出的字符后还被分解了吗???请教大家!!!!

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
本帖最后由 刘勇强 于 2013-5-29 23:41 编辑

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


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

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



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

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


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 刘国强 于 2013-5-30 00:11 编辑

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


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


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

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

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



评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
如果文件的文本是通过DataOutputStream写入的读取就不会出现乱码了 ! 这么解??
回复 使用道具 举报
个人理解应该这么解,具体的楼主可以测试一下,
回复 使用道具 举报
如果问题以解决,请结贴,未解决追加提问。谢谢合作
回复 使用道具 举报
刘胜寒 发表于 2013-5-31 00:45
如果问题以解决,请结贴,未解决追加提问。谢谢合作

额~~没结过呢!怎么结帖???
回复 使用道具 举报
Sword 金牌黑马 2013-5-31 23:53:27
8#
归☆夜↑『 发表于 2013-5-31 12:18
额~~没结过呢!怎么结帖???

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

http://bbs.itheima.com/thread-49464-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马