多个图像到一个字节数组?字节数组的数组?
Multiple images to one byte array? Array of byte arrays?
我的文件夹中有很多 张图片。我想为所有图像(字节数组的数组)制作一个字节数组,但我只设法为一个图像制作一个数组。
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]
在我们解决您的问题之前,您的代码实际上在其他方面有问题。
[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 文件分发,图像应该在里面,这将使它们不是文件。
我的文件夹中有很多 张图片。我想为所有图像(字节数组的数组)制作一个字节数组,但我只设法为一个图像制作一个数组。
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]
在我们解决您的问题之前,您的代码实际上在其他方面有问题。
[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 文件分发,图像应该在里面,这将使它们不是文件。