java - 多个图像到一个字节数组?字节数组的数组?

标签 java arrays arraylist java-8 rgb

我的文件夹中有许多张图像。我想为所有图像(字节数组的数组)创建一个字节数组,但我只为一张图像创建了一个数组。

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/

相关文章:

java - 如何检查确保数组不包含两次相同的元素

java - 使用FactoryBean初始化的Bean接收FactoryBean而不是它创建的Obect

c++ - 数组排序难度

java - ArrayList 内的 ArrayList - 访问值时出现问题

java - IndexOutOfBoundsException : Index: 3, 大小:3

java - 使用空格时字符串索引越界异常

java - 为多项 Activity 实现一次选项菜单

java - 从 fragment 导航到另一个 fragment 时隐藏键盘

sql - 为什么我的查询结果随机返回?

javascript - 为什么用于存储所选文件名和文件路径的隐藏输入字段没有在以下情况下生成在表单上?