我的文件夹中有许多张图像。我想为所有图像(字节数组的数组)创建一个字节数组,但我只为一张图像创建了一个数组。
File file = new File("D:\\swim\\swim99.png");
//init array with file length
byte[] bytesArray = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytesArray); //read file into bytes[]
fis.close();
System.out.print(Arrays.toString(bytesArray));
那么我可以一次访问文件夹中的多个图像并获取每个图像的字节数组,然后将它们放入二维数组数组中,其中[图像数量[字节数组图像一]]
?
预期输出:A[图像编号][它是字节数组]
最佳答案
在我们解决您的问题之前,您的代码实际上在其他方面已经严重损坏。
[1] 您必须安全地关闭资源 - 但这并不安全。使用 try-with-resources。
[2] .read(byteArr)
并不执行您认为的操作。它至少读取 1 个字节(除非 I/O 错误或到达文件末尾),但不一定读取所有字节。它会阅读能够快速提供的尽可能多的内容。对于较大的文件,不都是字节。
修复很简单 - 停止使用过时的、已有 25 年历史的 API。
Path p = Paths.get("/path/to/imagefile");
byte[] data = Files.readAllBytes(p);
解决了所有问题,并且简单得多。
至于数组问题 - 这是基本的 java 101。我建议你遵循 tutorial about arrays .
byte[][] allImages = new byte[10][];
Path imgFolder = Paths.get("/folder/to/images");
for (int i = 0; i < 10; i++) {
allImages[i] = Files.readAllBytes(imgFolder.resolve(i + ".png"));
}
假设您有文件 /folder/to/images/0.png
到 .../9.png
。
如果这些图像是您打算发布的 Java 应用程序的一部分,那么您不需要任何这些,而是要寻找 getResourceAsStream
- 因为 Java 应用程序作为 jar 文件分发,并且图像应该在里面,这将使它们不是文件。
关于java - 多个图像到一个字节数组?字节数组的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67756662/