代码改变世界

DataOutputStream的乱码问题

2011-06-02 23:38  Rollen Holt  阅读(33984)  评论(0编辑  收藏  举报
import java.io.*;
public class Hello{
public static void main(String[] args){
    try{

// 通过DataInputStream数据输入流把readme.txt中的内容读出来
// 通过DataOutputStream数据输出流把readme.txt的内容写入文件readme.out中
    	
     DataOutputStream out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("readme.out"),512));
     BufferedReader in=new BufferedReader(new FileReader("readme.txt"));
     String s;
     while((s=in.readLine())!=null){
      System.out.println(s);
      //1 源文件为readme.txt,里面的内容是中文和英文,可以显示(不是乱码)
      //2 要求通过OutputStream将readme.txt写入一个二进制文件(要求可以显示,不是乱码)
      //    s为二进制代码,现在是无论转码与否s都是乱码
      out.write(s.getBytes());//取得字符串对应的二进制码,然后再写入文件中
      byte[] t;
      t="\n?0aA".getBytes();
      for(int i=0;i<t.length;i++)
      {   
          System.out.print(t[i]);
      //out.writeInt(t[i]);//把二进制代码写入文件中     
      }
      out.write(t);//把二进制代码写入文件中     
      out.write("subj哈哈\n".getBytes("gb2312"));//根据"gb2312"编码取得字符串的二进制码数组
     }
     in.close();   
     out.flush();
     out.close();
   
   
    // 通过DataOutputStream数据输出流把浮点型、整型、真假型、字符型、字符串型写入文件sample.out中
   
     /* 但是sample.out文件中的浮点型、整型、真假型乱码,因为存储的是二进制文件编码,
      * 用记事本打开看到的是相应的assca码值
      * 如:
      * a对应的assca码为97
      * 10:显示为换行
      * 63: 显示为?
      * 48: 显示为0
      * 97: 显示为a
      * 65: 显示为A
     */
     double pi=3.1415;
           int i=10;
           boolean okay=true;
           char ch='J';
           String s1="Java C 0 Pascal123123123 苏标记!";
           FileOutputStream fsout=new FileOutputStream("sample.out");
           DataOutputStream out1=new DataOutputStream(fsout);
           out1.writeDouble(pi);  //向文件写入浮点型数据
           out1.writeInt(i);  //向文件写入整形数据
           out1.writeBoolean(okay); //向文件写入booleen型数据
           out1.writeChar(ch); //向文件写入字符型数据
           out1.writeUTF(s1);  //向文件写入字符串数据
           out1.close();
         
           // 通过DataInputStream数据输入流把浮点型、整型、真假型、字符型、字符串型从文件sample.out中读出来
     FileInputStream fsin=new FileInputStream("sample.out");
              DataInputStream in1=new DataInputStream(fsin);
              pi=in1.readDouble();
              i=in1.readInt();
              okay=in1.readBoolean();
              ch=in1.readChar();
              s1=in1.readUTF();
              in1.close();
              System.out.println("pi="+pi+", i="+i);
              System.out.println("okay="+okay+", ch="+ch);
              System.out.println("s="+s1);


                     
   
    }catch(Exception e){
     e.printStackTrace();
    }
  
}

}
我在readme.txt中的内容为:renwenchao1111
输出的文件sample.out的内容乱码
eclipse对话框中的输出为:renwenchao1111
063489765pi=3.1415, i=10
okay=true, ch=Js=Java C 0 Pascal123123123 苏标记!