Strim I/O Java menyediakan mekanisme penimbalan melalui BufferedInputStream dan BufferedOutputStream untuk meningkatkan prestasi baca dan tulis. BufferedInputStream membaca data daripada aliran input asas dan menyimpannya dalam penimbal dalaman, meningkatkan prestasi pada bacaan kerap bagi blok data kecil. BufferedOutputStream menulis data ke penimbal dalaman dan, apabila penimbal penuh atau perlu disiram dengan segera, ke aliran keluaran asas, mengoptimumkan prestasi untuk menulis jarang blok data besar. Mekanisme Penimbalan Java I/O Streams Apabila beroperasi pada penimbal, operasi I/O dilakukan pada penimbal dan bukannya terus pada fail atau strim asas. Ini menjimatkan masa panggilan sistem dan penukaran konteks.
Pelaksanaan mekanisme penimbalan
Mekanisme penimbal dalam aliran Java I/O dilaksanakan dengan menggunakan BufferedInputStream
danBufferedOutputStream aliran input/output. Strim ini mengandungi penimbal dalaman untuk menyimpan blok data dalam ingatan.
BufferedInputStream
BufferedInputStream
membaca data dan menyimpannya dalam penimbal dalaman. Apabila penimbal diisi, strim membaca satu lagi blok data daripada aliran input asas, mengisi penimbal dan mengembalikan bait pertama dalam penimbal. Ini meningkatkan prestasi pada bacaan kerap blok data kecil.
BufferedOutputStream
Contoh Praktikal
Pertimbangkan kod berikut, yang menggunakanBufferedInputStream
untuk membaca dalam fail teks: try (BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"))) { byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = in.read(buf)) != -1) { System.out.write(buf, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); }
BufferedInputStream
读入数据并存储在内部缓冲区中。当缓冲区填满时,流会从底层输入流中读取另一个数据块,填充缓冲区,并返回缓冲区中的第一个字节。这提高了对小数据块频繁读取的性能。
BufferedOutputStream
BufferedOutputStream
将数据写入内部缓冲区。当缓冲区已满或者需要立即刷新数据时,流将缓冲区中的数据写入底层输出流。这优化了对大数据块的不频繁写入的性能,减少了系统调用的数量。
实战案例
考虑以下代码,它使用 BufferedInputStream
读入一个文本文件:
在此示例中,BufferedInputStream
将数据分块读入内部缓冲区,从而提高了对小数据块频繁读取的性能。
需要注意的点
BufferedInputStream
和 BufferedOutputStream
类的缓冲区是通过 java.io.BufferedInputStream.DEFAULT_BUFFER_SIZE
(默认为 8192 字节)指定的,您可以在构建流实例时覆盖此值。flush()
方法时,BufferedOutputStream
会立即将缓冲区中的数据写入底层输出流,而 BufferedInputStream
Dalam contoh ini, BufferedInputStream
membaca data dalam ketulan Penampan dalaman, dengan itu meningkatkan prestasi pada bacaan kerap blok data kecil. BufferedInputStream
dan BufferedOutputStream
ditentukan melalui java.io.BufferedInputStream.DEFAULT_BUFFER_SIZE
(lalai ialah 8192 bait) , anda boleh mengatasi nilai ini apabila membina contoh strim. 🎜flush()
, BufferedOutputStream
akan segera menulis data dalam penimbal ke aliran keluaran asas, manakala BufferedInputStream
Penampan disiram apabila semua data dibaca daripada penimbal atau apabila strim ditutup. 🎜🎜Atas ialah kandungan terperinci Bagaimanakah mekanisme penimbal bagi aliran Java I/O dilaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!