写入这样的二进制文件时:
byte[] content = {1,2,3};
FileOutputStream output = new FileOutputStream("data.bin");
DataOutputStream fileName = new DataOutputStream(output);
fileName.writeInt(content.length);
for (int i = 0; i < content.length; i++)
{
fileName.writeInt(content[i]);
System.out.println(content[i]);
}
fileName.close();
使用FileInputStream / DataInputStream和.readInt()读取它时一切正常。 (如果我使用.skip(4);因为第一个似乎包含一个值,即写入的位数)
但是,如果使用扫描仪将byte []内容替换为输入。
java.util.Scanner in = new java.util.Scanner(System.in);
String inputAsString = in.nextLine();
byte[] content = inputAsString.getBytes();
我注意到它以十进制形式写入二进制文件。 1变为49,2变为50,3是51 ... 我的问题是如何将它读回1,2,3,就像第一个带有硬编码字节数组的例子一样。
答案 0 :(得分:1)
当您从输入中读取数据时,它是一个字符串。所以你得到ascii / utf-x字节。所以你写的值是字节。您想将读取的输入转换为int:
int toWrite = parseInt(inputAsString);
fileName.writeInt(toWrite);
请注意,51是分配给字符'3'的ascii值
如果你把它作为一个int写出来的话,你应该可以读好它。
答案 1 :(得分:0)
在循环中使用in.nextByte()
将条目读取为字节。
byte[] bytes = new byte[SIZE];
int indx = 0;
while(in.hasNextByte()){
bytes[indx++] = in.nextByte();
}
编辑:如果你不知道大小,那么:
List<Byte> byteList = new ArrayList<Byte>();
while(in.hasNextByte()){
byteList.add(in.nextByte());
}
Byte[] bytes = byteList.toArray(new Byte[]{});