现在我在做一个类的mock测试,需要自己编数据。leader要求数据放在一个二进制文件里面。
现在的问题是DataOutputStream写入的数据可以读出,但是我要怎么手动写数据进去?二进制编辑器?
另外,字符'a'在二进制文件中为什么是61?BCD码么?
急求各路神仙
------最佳解决方案--------------------
楼主所说的二进制文件,可能就是说非文本文件,或说不能用文本编辑器正确打开并编辑的文件. 象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
desc = in.readLine();
System.out.println( unit );
System.out.println( price );
System.out.println( desc );
total = total + unit * price;