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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下:
package studyreflect;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataStreamTest {

        public static void main(String[] args) {
                try {
                        FileOutputStream fos=new FileOutputStream("hello.txt");
                        BufferedOutputStream bos=new BufferedOutputStream(fos);
                        DataOutputStream dos=new DataOutputStream(bos);
                        dos.writeBytes("ab中国");
                        dos.writeChars("ab中国");
                        dos.close();

                        FileInputStream fis=new FileInputStream("hello.txt");
                        BufferedInputStream bis=new BufferedInputStream(fis);
                        DataInputStream dis=new DataInputStream(bis);
                        byte[] buf=new byte[1024];
                        int len=dis.read(buf);
                        System.out.println(new String(buf,0,len));


                } catch (FileNotFoundException e) {               
                        e.printStackTrace();
                } catch (IOException e) {       
                        e.printStackTrace();
                }       
        }
}问题,怎样才能正确读取writeChars和writeBytes写入的字符串,急求大神解答!!

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

5 个回复

倒序浏览
  1.         public static void main(String[] args) {
  2.                 try {
  3.                         FileOutputStream fos=new FileOutputStream("hello.txt");
  4.                         DataOutputStream dos=new DataOutputStream(fos);
  5.                         dos.writeChars("ab中国");     //一个字符写两个字节  
  6.                         dos.write("ab中国".getBytes()); //writebyte一个字符忽略高字节,只写低字节。
  7.                         dos.close();

  8.                         FileInputStream fis=new FileInputStream("hello.txt");
  9.                         DataInputStream dis=new DataInputStream(fis);
  10.                      
  11.                         char [] charbuf = new char[4];
  12.                         for(int i = 0;i<4;i++){
  13.                                 charbuf[i] = dis.readChar();
  14.                         }
  15.                         System.out.println(charbuf);
  16.                         
  17.                         byte[] buf=new byte[1024];
  18.                         int len=dis.read(buf);
  19.                         System.out.println(new String(buf,0,len));


  20.                 } catch (FileNotFoundException e) {               
  21.                         e.printStackTrace();
  22.                 } catch (IOException e) {        
  23.                         e.printStackTrace();
  24.                 }        
  25.         }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报

非常感谢,还有一个问题,如果上面不变,就是仍然用writeBytes("ab中国"),应该怎么读取呢?
回复 使用道具 举报
游泳的猫 发表于 2014-11-26 09:06
非常感谢,还有一个问题,如果上面不变,就是仍然用writeBytes("ab中国"),应该怎么读取呢? ...

writeBytes(String);-"ab中国"--->其实只写进去4个字节。
一个字符两个字节,但是它只写进去低字节,高字节忽略,如果是ASCII码(只有一个字节(低字节)即可表示),所以可以正确解码出来,但是中文字符是两个字节,高字节没有写进去,所以读出来也不能解码为中文字符。
回复 使用道具 举报
太深奥了。。
回复 使用道具 举报
kerner 发表于 2014-11-26 10:22
writeBytes(String);-"ab中国"--->其实只写进去4个字节。
一个字符两个字节,但是它只写进去低字节,高字 ...

高手。。。。。想明白了 谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马