zoukankan      html  css  js  c++  java
  • DataOutputStream的乱码问题

    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 苏标记!


    ==============================================================================

    本博客已经废弃,不在维护。新博客地址:http://wenchao.ren


    我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
    们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
    实我是一个程序员

    ==============================================================================
  • 相关阅读:
    正则表达式
    虚拟机winXP试用期已过无法激活问题解决
    model.addattribute()的作用
    model.addAttribute() return @ResponseBody $ajax success data的关系
    bootStrap的使用
    【navicat】navicat导入导出数据库步骤
    【对比】mysql 与 oracle 区别
    oracle错误
    【备忘】船舶的几个吨位概念
    0731
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2070091.html
Copyright © 2011-2022 走看看