将字节数组写入文件(大文件大小)
writing an array of bytes into a file (Large file size)
我有一个灰度图像,其中我以 字节 的二维数组的形式得到它们的表示,具有不同的值,具体取决于它们各自的比特率,即(0 ->255)。然后我应用一个或多个压缩算法,即 (运行 Length Encoding) 来提取另一个尺寸小得多的字节数组,这代表压缩操作。由此,我成功地将位图文件重建为原始形式,这代表了解压缩操作。
我知道一切正常,因为我通过解压操作得到了相同的图像。
现在我的问题是在进行压缩操作后,我想将结果数组存储到一个文件中,在解压时将其内容提取回来。
我试着把它写成 text file
FileOutputStream output = new FileOutputStream(new File("d:/"+ fileName+".jrle"));
IOUtils.write(rle, output);
我试着把它写成二进制文件
ObjectOutputStream myStream = new ObjectOutputStream(new FileOutputStream("d:/"+fileName+".dat"));
myStream.writeObject(rle);
然而,在这两种情况下,此文件的大小都比原始位图文件大得多。
512x512 bitmap file size 32KB
compressed text file size 272KB
compressed binary file size 257KB
bitmap's byte array size 262144
compressed array size 111049
因为我的压缩数组实际上比从位图文件中提取的原始数组小得多,我如何保存为比位图更小的文件?
我不确定我是否已正确解释自己,如果需要请询问更多详细信息。
谢谢!
我做了一些数学...
512 * 512 = 262144
32 KB = 32768
262144 / 32768 = 8
这意味着原始数组中的每个值实际上只包含一个位的值(这对灰度有意义),但占用了 space 个字节。
现在既然你申请了
one or more compression algorithms
生成的数组不太可能出现这种情况 (rle
),因此实际上在应用压缩之前,您将图像的大小增加了 8 倍。
您是否有任何特殊原因不以原始字节读取位图文件,例如像这样吗?:
File in = new File("d:/input.bmp");
byte[] array = new byte[(int)in.length()];
new FileInputStream(in).read(array);
我有一个灰度图像,其中我以 字节 的二维数组的形式得到它们的表示,具有不同的值,具体取决于它们各自的比特率,即(0 ->255)。然后我应用一个或多个压缩算法,即 (运行 Length Encoding) 来提取另一个尺寸小得多的字节数组,这代表压缩操作。由此,我成功地将位图文件重建为原始形式,这代表了解压缩操作。 我知道一切正常,因为我通过解压操作得到了相同的图像。
现在我的问题是在进行压缩操作后,我想将结果数组存储到一个文件中,在解压时将其内容提取回来。 我试着把它写成 text file
FileOutputStream output = new FileOutputStream(new File("d:/"+ fileName+".jrle"));
IOUtils.write(rle, output);
我试着把它写成二进制文件
ObjectOutputStream myStream = new ObjectOutputStream(new FileOutputStream("d:/"+fileName+".dat"));
myStream.writeObject(rle);
然而,在这两种情况下,此文件的大小都比原始位图文件大得多。
512x512 bitmap file size 32KB
compressed text file size 272KB
compressed binary file size 257KB
bitmap's byte array size 262144
compressed array size 111049
因为我的压缩数组实际上比从位图文件中提取的原始数组小得多,我如何保存为比位图更小的文件?
我不确定我是否已正确解释自己,如果需要请询问更多详细信息。
谢谢!
我做了一些数学...
512 * 512 = 262144
32 KB = 32768
262144 / 32768 = 8
这意味着原始数组中的每个值实际上只包含一个位的值(这对灰度有意义),但占用了 space 个字节。
现在既然你申请了
one or more compression algorithms
生成的数组不太可能出现这种情况 (rle
),因此实际上在应用压缩之前,您将图像的大小增加了 8 倍。
您是否有任何特殊原因不以原始字节读取位图文件,例如像这样吗?:
File in = new File("d:/input.bmp");
byte[] array = new byte[(int)in.length()];
new FileInputStream(in).read(array);