将输入写入二进制文件并将其作为int读回(获取十进制值)

时间:2012-12-05 14:58:16

标签: java

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

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

2 个答案:

答案 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[]{});