バッファストリーム
バッファリングされたストリームは、4つの基本的なFileXXXストリームの拡張である高度なストリームとも呼ばれます。したがって、これらも4つのストリームであり、データタイプによって
効率的に読み書きできるバッファストリーム、エンコーディングを変換できる変換ストリーム、永続ストレージオブジェクトです。シリアル化されたストリーム
- バイトバッファストリーム:BufferedInputStream、BufferedOutputStream
- 文字バッファストリーム:BufferedReader、BufferedWriter
バイトバッファリングされた入力ストリーム[BufferedInputStream]
!!!コードオン!!!
public class Demo01BufferedInputStreram {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\cccc.txt"));
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
bis.close();
}
}
!!!その結果!!!FileInputStreamが提供する機能は、ファイルの内容を効率的に読み取ることと同じです
バイトバッファー出力ストリーム[BufferedOutputStream]
!!!コードオン!!!
public class Demo02BufferedOutputStream {
public static void main(String[] args) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("F:\\dddd.txt", true));
String content = "!!!!Hello World!!!" + "\r\n";
for (int i = 0; i < 10; i++) {
bos.write(content.getBytes());
}
System.out.println("文件输出成功");
bos.close();
}
}
**!!!その結果!!!** FileIOnputStreamが提供する機能は、ファイルコンテンツを効率的に読み取ることと同じです
デモCopyFile
!!!コードを入力してファイルをコピーしてください!!!それがどのファイルであるかは気にしないでください。。。。
public class Demo03CopyFIle {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\Media\\MO8EPSG_1.rmvb"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("F:\\MO8EPSG_1.rmvb"));
long start = System.currentTimeMillis();
byte[] bytes = new byte[10245];
int len = 0;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
bis.close();
bos.close();
long end = System.currentTimeMillis();
System.out.println("本次复制文件用了:" + (end - start) + "毫秒");
}
}
**!!!その結果!!!** 1 Gファイルをコピーするのに1秒しかかかりませんでした
文字バッファリングされた入力ストリーム[BufferedReader]
文字、配列、および行を効率的に読み取るために、文字入力ストリームおよびバッファ文字からテキストを読み取ります。
バッファサイズを指定することも、デフォルトのサイズを使用することもできます。デフォルト値は、ほとんどの用途に十分な大きさです。
!!!コードオン!!!
public class BufferedReaderAndBufferedWriter {![在这里插入图片描述](https://img-blog.csdnimg.cn/20200217205959345.png)
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("F:\\cccc.txt"));
char[] chars = new char[1024];
int len = 0;
while ((len = br.read(chars)) != -1) {
System.out.println(new String(chars, 0, len));
}
}
}
!!!その結果!!!
注:
指定したファイルの入力はバッファーに入れられます。バッファリングは行われず、read()またはreadLine()を呼び出すたびに、バイトがファイルから読み取られ、文字に変換されて返される場合があります。これは非常に非効率的
です。テキスト入力にDataInputStreamsを使用するプログラムは、適切なBufferedReaderを使用して置き換えることができます各DataInputStreamをローカライズする
文字バッファー出力ストリーム[BufferedWriter]
文字をバッファリングして文字出力ストリームにテキストを書き込み、単一の文字、配列、および文字列を効率的に書き込みます。
バッファー・サイズを指定するか、デフォルトのサイズを受け入れることができます。デフォルト値は、ほとんどの用途に十分な大きさです。
!!!コードオン!!!
public class Demo02BufferedWriter {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\ffff.txt", true));
String content = "Hello World" + "\r\n";
for (int i = 0; i < 10; i++) {
bw.write(content);
}
bw.close();
}
}
!!!その結果!!!
注:
PrintWriterの出力はファイルにバッファーされます。バッファリングなし。print()メソッドを呼び出すたびに文字がバイトに変換され、すぐにファイルに書き込まれます。これは非常に非効率的です。