在java中逐字节读取
我试图在Java中读取bmp图像时使用线程。更确切地说,我想在4个数据块中读取它。这只是出于教育目的,我知道这不是你技术上需要的东西。 但是,我不知道如何逐字节或逐块读取文件。我唯一发现的是使用readAllBytes,这不是我所需要的,或者readByte,它要求我已经拥有字节数组,但这不再是线程读取。 对于给定的路径,是否有任何方法可以逐字节或逐块读取? 提前谢谢你在java中逐字节读取,java,multithreading,image,block,bmp,Java,Multithreading,Image,Block,Bmp,我试图在Java中读取bmp图像时使用线程。更确切地说,我想在4个数据块中读取它。这只是出于教育目的,我知道这不是你技术上需要的东西。 但是,我不知道如何逐字节或逐块读取文件。我唯一发现的是使用readAllBytes,这不是我所需要的,或者readByte,它要求我已经拥有字节数组,但这不再是线程读取。 对于给定的路径,是否有任何方法可以逐字节或逐块读取? 提前谢谢你 .read(),没有参数,只读取一个字节,但有两个重要注意事项: 这不是线程安全的。线程+磁盘通常不起作用;瓶颈是磁盘,而不是
.read()
,没有参数,只读取一个字节,但有两个重要注意事项:
read()
通常非常慢。这些都是低级操作,但磁盘往往一次读取整个数据块,无法一次读取一个字节。因此,read()
被实现为:读取可以读取的最小数据块(通常仍然是4096个或更多字节),从该数据块中取出所需的一个字节,然后将剩余部分扔进垃圾桶。换句话说,如果您通过调用.read()
4906次来读取文件,那么将从磁盘读取同一块4096次。鉴于致电:
如果您的目标是加速BMP处理,“多线程读取过程”现在也是一种方式。我无法解释为什么这里会涉及多线程。它既不适合了解它,也不适合加速任何事情。使用
FileInputStream fis=newfileinputstream(file)代码>然后在其上执行int val=fis.read()
。val==-1表示文件结束。是否要创建例如4个线程并在4个不同线程中读取图像的四个不同部分?@mahfujasif是!我是Java的初学者,我不知道如何做到这一点,我一直在努力,因为我甚至不知道这是否可能。我使用生产者读取数据块,消费者将其写入文件的最后一个变量。@JayC667感谢您的回复!在这个例子中谁是文件,如果它是图像中的字节数组,这不意味着我应该已经读取了图像(数组)吗?我只想通过这条路径,以便只分块阅读。非常感谢您的回复,我将尝试使用您的方法!这个例子是我们的教授给我们的,我们必须构建一个图像过滤器,其中图像的读取是通过线程完成的。它很慢,但我不知道如何用另一种方式来做。只是一个奎斯顿,对不起!在本例中,谁是fileIn,是ByteArrayInputStream还是DataInputStream?而且,这难道不需要已经在fileIn中写入文件吗?我试图只通过这条路,直接从那里阅读。可能吗?
byte[] b = new byte[4096];
int read = fileIn.read(b);