私たちは実際には、バッファの真ん中に流れをスピードアップするために使用することができたときに、文字やバイトストリームファイルを操作するために使用された場合、バッファフローが何かでクリアしてください。はいこのセンスバッファストリームは、ここで私たちは鶏をアクセラレータとして理解することができ果たし、仲介のスピードを加速することです。いいえアクセラレータ、あなたはまだ鶏を食べることはできませんが、遅れがたくさんあるでしょう。スマンは、ハハです。
ストリームバッファの文字:BufferedReaderのBufferedWriterの
ここに私達はちょうど私の最後の二つのブログのコードストリームバッファの一部の傍受を加え十分にしたいです
文字ストリームは、リードバッファ:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* @author Hercules
* @version 创建时间:2020年2月13日 下午5:44:39
* 缓冲类
*/
public class Buffer {
public static void main(String[] args) {
readBufferedFile();
}
/**
* 缓冲字符流读取
*/
public static void readBufferedFile() {
Reader reader = null;
BufferedReader br = null;
try {
reader = new FileReader("C:\\Users\\张帅\\Desktop"+File.separator+"test.txt");
br = new BufferedReader(reader);
String str = null;
StringBuilder sb = new StringBuilder();//创建一个可变的字符串
//每次读取一行
while((str = br.readLine()) != null) {
sb.append(str);
//因为readLine()使用换行符来确认读取多少,所以不会读取换行符
sb.append("\n");
}
System.out.println(sb.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally { //这里关流有一个原则先开的后关,后开的先关
if(br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
結果は以下の通りである:
として私たちは、フローオフ順序に注意を払うに持っているので、バッファの流れは、ここで仲介役は、我々は2つのストリームの合計が開かところ、ことに留意すべきであるプレイを加速している、上記と述べ、ここでの順序がそうです関係の最初の開封後、最初のターンの開封後。あなたは、データ構造を研究している場合は、私たちは自然にスタックを考えると信じています。
次の関数はに与えられています
/**
* 字符缓冲输出流
*/
public static void writeBuddered() {
Writer writer = null;
BufferedWriter bw = null;
String str = "我是一个新的字符串";
try {
writer = new FileWriter("C:\\Users\\张帅\\Desktop"+File.separator+"test.txt",true);
//这里true的意思就是将内容追加到文件中而不是覆盖原本文件的内容
bw = new BufferedWriter(writer);
bw.write(str);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ここでは、注意を払う必要があります
writer = new FileWriter("C:\\Users\\张帅\\Desktop"+File.separator+"test.txt",true);
このコードの真のパラメータは、このパラメータは、当社のコンテンツではなく、元のファイルの内容を上書きする、元のファイルに追加リストに追加されてできるようにすることです
ここでも紹介したバイトの入力および出力ストリームをバッファリングは:
ここで私は私の頭そのQQバーを使用していました。母は、このファイルは以下の通りであります:
/**
* 缓冲字节输入输出流
*/
public static void stream() {
InputStream inputStream = null;//字节输入流
BufferedInputStream bis = null;//缓冲字节输入流
OutputStream outputStream = null;//字节输出流
BufferedOutputStream bos = null;//缓冲字节输出流
try {
File file = new File("C:\\Users\\张帅\\Desktop" + File.separator +"power.png");
inputStream = new FileInputStream(file);
bis = new BufferedInputStream(inputStream);
//这里的意思是把我们将读到的字节写入一个power1.png的文件中去
//当然如果指定位置还没有这个文件就会创建一个
outputStream = new FileOutputStream("C:\\Users\\张帅\\Desktop" + File.separator +"power1.png");
bos = new BufferedOutputStream(outputStream);
byte [] bytes = new byte[1024];
int len = 0;
while((len = bis.read(bytes)) != -1) {
//这个while这里比较复杂我会比较详细的解释,我们每次是读取1024个字节的数据,假设我们读取到最后
//这个文件没有1024个字节了,比方说它就剩了500字节,那么如果我们把多的那500多个字节也写到指定的文件中去
//那么这里很可能发生文件损坏所以我们就需要用len记录下每次读到的长度。然后写进去
bos.write(bytes,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
結果は以下の通りであります: