我试图将一个数字(字节)列表存储到一个文件中,以便我可以将它们检索到一个byte []。
59 20 60 21 61 22 62 23 63 24 64 25 65 26 66 27 67 28 68 29
67 30 66 31 65 32 64 33 63 34 62 35 61 36 60 37 59 38
66 29 65 30 64 31 63 32 62 33 61 34 60 35 59 36 58 37
65 28 64 29 63 30 62 31 61 32 60 33 59 34 58 35 57 36...
我尝试将它们保存到文本文件中,但相关代码似乎没有正确读取它。
try {
File f = new File("cube_mapping2.txt");
array = new byte[file.size()]
FileInputStream stream = new FileInputStream(f);
stream.read(array);
} catch (Exception e) {
e.printStackTrace();
}
是否有正确的方法来保存文件,以便FileInputReader.read(byte[] buffer)
将使用我的字节填充数组?
答案 0 :(得分:3)
我将使用Scanner。像这样:
public static void main(String[] args) throws IOException {
InputStream stream = new FileInputStream("cube_mapping2.txt");
Scanner s = new Scanner(stream);
List<Byte> bytes = new ArrayList<Byte>();
while (s.hasNextByte()) {
bytes.add(s.nextByte());
}
System.out.println(bytes);
}
我在包含您的确切输入的文件上对此进行了测试,但它确实有效。输出是:
[59, 20, 60, 21, 61, 22, 62, 23, 63, 24, 64, 25, 65, 26, 66, 27, 67, 28, 68, 29, 67, 30, 66, 31, 65, 32, 64, 33, 63, 34, 62, 35, 61, 36, 60, 37, 59, 38, 66, 29, 65, 30, 64, 31, 63, 32, 62, 33, 61, 34, 60, 35, 59, 36, 58, 37, 65, 28, 64, 29, 63, 30, 62, 31, 61, 32, 60, 33, 59, 34, 58, 35, 57, 36]
答案 1 :(得分:2)
FileInputStream适用于二进制文件。您发布的代码将从二进制文件中读取,但不是很正确,因为stream.read(array)读取最多数组的长度;它不承诺读取整个数组。 read(array)的返回值是实际读取的字节数。为了确保获得所需的所有数据,您需要将read()调用放在循环中。
回答你的实际问题:以一种stream.read(array)能够读回来的方式写入文件,使用FileOutputStream.write(array)。
如果您对文本文件而不是二进制文件感到满意,请使用@ Bohemian的回答。
答案 2 :(得分:0)
array = new byte[file.size()]
这是否意味着,没有空间来存储每两个数字的单独标记? 根据你的字节数组,如果它们中的每一个只有两个空格,那么你可以使用两个空格的临时字节数组来读取你存储在文件中的每个字节。像
这样的东西byte[] temp = new byte[2];
stream.read(temp);
可以确保逐个读取字节数。