0

誰かがバッファの使用法と、おそらく使用中のバッファの簡単な(文書化された)例を説明してくれませんか。ありがとう。

私は Java プログラミングのこの分野に関する知識があまりないので、間違った質問をした場合はご容赦ください。:s

4

3 に答える 3

2

バッファは、データが処理される前に一時的に格納されるメモリ内のスペースです。ウィキ記事参照

ByteBuffer クラスの使用方法を示す簡単なJava の例を次に示します。

アップデート

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

物事が少し片付くことを願っています。

于 2009-08-28T10:54:13.780 に答える
1

bufferとは、通常、一部のデータを一時的に格納するためのメモリ ブロックを意味します。バッファの主な用途の 1 つは、I/O 操作です。

ハードディスクのようなデバイスは、ディスク上の連続するビットのブロックを一度にすばやく読み書きするのに適しています。ハードディスクに「この 10,000 バイトを読み取って、ここのメモリに入れます」と指示すると、大量のデータの読み取りが非常に高速になります。ループをプログラムしてバイトを 1 つずつ取得し、ハードディスクに毎回 1 バイトを取得するように指示すると、非常に非効率的で遅くなります。

したがって、10,000 バイトのバッファーを作成し、ハードディスクにすべてのバイトを一度に読み取るように指示してから、メモリ内のバッファーからそれらの 10,000 バイトを 1 つずつ処理します。

于 2009-08-28T10:53:20.910 に答える
0

I/O に関する Sun Java チュートリアルのセクションでは、このトピックについて説明しています。

http://java.sun.com/docs/books/tutorial/essential/io/index.html

于 2009-08-28T10:53:50.317 に答える