我使用FileInputStream类,调用read()从一个文件里读出里面的内容,里面有中文的
第一个程序是我把它直接显示在命令行窗口上,System.out.print(b);结果中文显示的是一堆问号;
第二个程序是我把它写入另一个文件里面,write(b);结果中文可以显示出来了怎么不同的呢...
不是说FileInputStream的read()是读出一个字节的么,而中文是两个字节的,应该显示的是像在命令行窗口那样一堆问号的,为什么写入文件里显示正常呢??请大侠指教指教
第一个程序是我把它直接显示在命令行窗口上,System.out.print(b);结果中文显示的是一堆问号;
第二个程序是我把它写入另一个文件里面,write(b);结果中文可以显示出来了怎么不同的呢...
不是说FileInputStream的read()是读出一个字节的么,而中文是两个字节的,应该显示的是像在命令行窗口那样一堆问号的,为什么写入文件里显示正常呢??请大侠指教指教
用FileReader试试?一块学习。
首先假设文件里的内容是二进制对应的二进制编码为B6 FE BD F8 D6 C6调用read()按字节读取的时候是先读入B6 再读入FE 接着是BD
用System.out.print(b);打印出单个字节的时候也是先打印出B6对应unicode的字符 再打印出FE对应unicode的字符也就是每次打印一个字节就显示对应unicode的字符 但是中文操作系统没有这些异常字符 所以显示问号
而当写入文件的时候 虽然是先写入B6 再写入FE 接着是BD。。一个字节一个字节写入的 但是字节的顺序没有变
全部写入完成之后 文件的二进制表示形式还是B6 FE BD F8 D6 C6 当用记事本打开的时候就一次对内容进行Unicode编码 显示出二进制三个字 这和之前的每个字节编码一次是完全不一样的
write字符流
如果你输出时还是用字节流outputstream,你会看到还是一堆问号?
如果你输入时用的是字符流,或者用inputstreamReader转换,那你可以直接用标准输出可以看到还是汉字
IO最基本的知识,我刚刚学过了,窃喜。。