3

像这样写入二进制文件时:

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,就像使用硬编码字节数组的第一个示例一样。

4

2 回答 2

1

当您从输入中读取数据时,它是一个字符串。所以你得到了 ascii/utf-x 字节。所以你写的值是字节。你想把你读到的输入变成一个 int:

int toWrite = parseInt(inputAsString);
fileName.writeInt(toWrite);

请注意,51 是分配给字符 '3' 的 ascii 值

如果您将其写为 int,您也应该能够将其读入。

于 2012-12-05T15:03:51.633 回答
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[]{});
于 2012-12-05T15:01:39.690 回答