现在我在做一个类的mock测试,需要自己编数据。leader要求数据放在一个二进制文件里面。
现在的问题是DataOutputStream写入的数据可以读出,但是我要怎么手动写数据进去?二进制编辑器?
另外,字符'a'在二进制文件中为什么是61?BCD码么?
急求各路神仙

解决方案 »

  1.   

         楼主所说的二进制文件,可能就是说非文本文件,或说不能用文本编辑器正确打开并编辑的文件. 象java的.class文件,mp3文件,可执行的.exe 文件等都可看作是“二进制”文件。
    'a'的ascii编码是0x61,所以如果文件里的字节是0x61,文本编辑器就会认为是代表字母'a',显示出来。
      

  2.   

    哦 这个刚才迷糊了。把61当bcd码了。其实我需要的就是一个txt或者dat文件,写入后普通文本编辑器打开时乱码。比如'a'可以写成0061,数字怎么办?
    下面是a.txt用editplus二进制viewer打开的读写的代码
    /**
     * 
     */import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.EOFException;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;/**
     * @author Administrator
     *
     */
    public class BinaryUtil {
    public static void main(String[] args) throws IOException {
    DataOutputStream out = new DataOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\a.txt"));
        double[] prices = { 19.99, 9.99, 15.99, 3.99};
        int[] units = { 12, 8, 13, 29 };
        String[] descs = { "Java", "Source ", "and","Support."};

        for (int i = 0; i < prices.length; i++) {
          out.writeDouble(prices[i]);
          out.writeChar('\t');
          out.writeInt(units[i]);
          out.writeChar('\t');
          out.writeChars(descs[i]);
          out.writeChar('\n');
        }
        out.close();

        // read it in again
        DataInputStream in = new DataInputStream(new FileInputStream(
            "C:\\Users\\Administrator\\Desktop\\a.txt"));

        double price;
        int unit;
        String desc;
        double total = 0.0;

        try {
         while (true) {
            price = in.readDouble();
            in.readChar(); // throws out the tab
            unit = in.readInt();
            in.readChar(); // throws out the tab
            desc = in.readLine();
            System.out.println( unit );
            System.out.println( price );
            System.out.println( desc );
            total = total + unit * price;
           }
        } catch (EOFException e) {
        }
        in.close();
    }
    }