【问题标题】:Multiple images to one byte array? Array of byte arrays?多个图像到一个字节数组?字节数组数组?
【发布时间】:2023-03-15 08:46:01
【问题描述】:

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

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));

那么我可以一次访问一个文件夹中的多个图像并获取每个字节数组,然后将它们放入数组数组的二维数组中,其中[Number of image[byte array image one]]

预期输出:A[image Number][It's byte array]

【问题讨论】:

  • 为什么?通常您将显示图像,因此您应该直接从输入流中创建它们。您不希望在内存中再复制一份数据。

标签: java arrays arraylist java-8 rgb


【解决方案1】:

在我们解决您的问题之前,您的代码实际上在其他方面已经很糟糕了。

[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 文件分发的,并且图像应该在里面,这会使它们不是文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多