日期:2014-05-19  浏览次数:20682 次

关于java读取二进制文件的问题
现在我在做一个类的mock测试,需要自己编数据。leader要求数据放在一个二进制文件里面。
现在的问题是DataOutputStream写入的数据可以读出,但是我要怎么手动写数据进去?二进制编辑器?
另外,字符'a'在二进制文件中为什么是61?BCD码么?
急求各路神仙
------最佳解决方案--------------------
     楼主所说的二进制文件,可能就是说非文本文件,或说不能用文本编辑器正确打开并编辑的文件. 象java的.class文件,mp3文件,可执行的.exe 文件等都可看作是“二进制”文件。
'a'的ascii编码是0x61,所以如果文件里的字节是0x61,文本编辑器就会认为是代表字母'a',显示出来。
------其他解决方案--------------------
引用:
楼主所说的二进制文件,可能就是说非文本文件,或说不能用文本编辑器正确打开并编辑的文件. 象java的.class文件,mp3文件,可执行的.exe 文件等都可看作是“二进制”文件。
'a'的ascii编码是0x61,所以如果文件里的字节是0x61,文本编辑器就会认为是代表字母'a',显示出来。

哦 这个刚才迷糊了。把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