Java 缓冲区和字节?

Java 缓冲区和字节?,java,buffer,byte,Java,Buffer,Byte,有人能给我解释一下使用缓冲区的用途吗?也许还有一些简单的(记录在案的)使用缓冲区的例子。谢谢 我在Java编程方面缺乏很多知识,所以如果我问错了,请原谅s有了缓冲区,人们通常指的是临时存储一些数据的内存块。缓冲区的一个主要用途是在I/O操作中 像硬盘这样的设备擅长一次性快速读取或写入磁盘上的连续位块。如果您告诉硬盘“读取这10000个字节并将它们放在内存中”,则可以非常快速地读取大量数据。如果你编写一个循环,然后一个接一个地获取字节,告诉硬盘每次获取一个字节,那么这将是非常低效和缓慢的 因此,您

有人能给我解释一下使用缓冲区的用途吗?也许还有一些简单的(记录在案的)使用缓冲区的例子。谢谢


我在Java编程方面缺乏很多知识,所以如果我问错了,请原谅s

有了缓冲区,人们通常指的是临时存储一些数据的内存块。缓冲区的一个主要用途是在I/O操作中

像硬盘这样的设备擅长一次性快速读取或写入磁盘上的连续位块。如果您告诉硬盘“读取这10000个字节并将它们放在内存中”,则可以非常快速地读取大量数据。如果你编写一个循环,然后一个接一个地获取字节,告诉硬盘每次获取一个字节,那么这将是非常低效和缓慢的


因此,您创建了一个10000字节的缓冲区,让硬盘一次性读取所有字节,然后从内存中的缓冲区逐个处理这些10000字节。

对于缓冲区,人们通常指的是临时存储一些数据的内存块。缓冲区的一个主要用途是在I/O操作中

像硬盘这样的设备擅长一次性快速读取或写入磁盘上的连续位块。如果您告诉硬盘“读取这10000个字节并将它们放在内存中”,则可以非常快速地读取大量数据。如果你编写一个循环,然后一个接一个地获取字节,告诉硬盘每次获取一个字节,那么这将是非常低效和缓慢的


因此,您可以创建一个10000字节的缓冲区,让硬盘一次性读取所有字节,然后从内存中的缓冲区中逐个处理这些10000字节。

有关I/O的Sun Java教程部分介绍了以下主题:


有关I/O的Sun Java教程部分介绍了以下主题:


缓冲区是内存中的一个空间,数据在处理之前临时存储在这里。看

下面简单介绍如何使用ByteBuffer类

更新


希望这能把事情弄清楚一点。

缓冲区是内存中的一个空间,在处理数据之前,数据会临时存储在这里。看

下面简单介绍如何使用ByteBuffer类

更新


希望这能把事情弄清楚一点。

我想你需要更具体一些。到目前为止,这似乎并不特定于Java——除非您指的是Java.nio.ByteBuffer?你具体想做什么?你遇到了什么问题?我认为你需要更具体一些。到目前为止,这似乎并不特定于Java——除非您指的是Java.nio.ByteBuffer?您具体想做什么,遇到了什么问题?也许您可以复制简单的代码并记录每一行?谢谢您的记录,真的很有帮助+1用于记录这段难看的代码。看看这个循环!异常处理(不保证通道在之后关闭)!我以它为例来教我的团队交付干净的代码。也许你可以复制简单的代码并记录每一行?谢谢你记录它,真的很有帮助+1用于记录这段难看的代码。看看这个循环!异常处理(不保证通道在之后关闭)!我以它为例,教导我的团队交付干净的代码。
public static void main(String[] args) throws IOException 
{
    // reads in bytes from a file (args[0]) into input stream (inFile)
    FileInputStream inFile = new FileInputStream(args[0]);
    // creates an output stream (outFile) to write bytes to.
    FileOutputStream outFile = new FileOutputStream(args[1]);

    // get the unique channel object of the input file
    FileChannel inChannel = inFile.getChannel();
    // get the unique channel object of the output file.
    FileChannel outChannel = outFile.getChannel();    

    /* create a new byte buffer and pre-allocate 1MB of space in memory
       and continue to read 1mb of data from the file into the buffer until 
       the entire file has been read. */
    for (ByteBuffer buffer = ByteBuffer.allocate(1024*1024); inChannel.read(buffer) !=  1; buffer.clear()) 
    {
       // set the starting position of the buffer to be the current position (1Mb of data in from the last position)
       buffer.flip();
       // write the data from the buffer into the output stream
       while (buffer.hasRemaining()) outChannel.write(buffer);
    }

    // close the file streams.
    inChannel.close();
    outChannel.close();     
}