どんな流れですか?
ストリームは抽象的な概念であり、入力および出力デバイスの抽象化であり、入力ストリームは入力チャネルとみなすことができ、出力ストリームは出力チャネルとみなすことができます。入力ストリームはプログラムに相対的であり、プログラムへの外部データは入力ストリームを使用する必要があります。出力ストリームは、プログラムに相対的であり、外部へのデータを転送するプログラムは、出力ストリームを使用する必要があります。
バイトストリームとは何ですか?
バイトストリーム-伝送中に転送されるデータの最も基本的な単位は、バイトのストリームです。
キャラクタ・ストリームとは何ですか?
キャラクタ・ストリーム - 送信中に転送されるデータの最も基本的な単位である文字のストリーム。
つまみの流れ
バイトストリーム用のクラスは、通常 stream で終わります。
一般的に使用されるバイト入力ストリームは次のとおりです: InputStream FileInputStream BufferedInputStream
使用法:TXTからテキスト情報をプリントアウトします:
コード
public class FileInputStreamDemo {
public static void main(String[] args) {
InputStream is =null;
try {
is = new FileInputStream(new File("E:/java /a.txt")); //このフォルダをメモリーに持つ必要がある
byte[] chars = new byte; //InputStreamDemoではbyteを使用する。
int lenth = 0;
while((lenth = is.read(chars))!=-1){ // .txt文字に読み込む
String str = new String(chars,0,lenth); //バイト配列を文字列に変換するループ
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
is.close(); //
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
走行結果
一般的に使用されるバイト出力ストリームは次のとおりです: OutputStream FileOutputStream BufferedOutputStream
使用法:文字列を TXT にプリントします:
public class Demo {
//hello world. "というフレーズをテキストファイルに書く。
public static void main(String[] args){
OutputStream os = null;
try {
//1.ストリームオブジェクトを作成する
File file = new File("E:/java /a.txt"); //このファイルが存在しない場合、自動的に作成される
os = new FileOutputStream(file,true); //OutputStreamは抽象クラスであり、FileOutputStreamはサブクラスであり、パラメータはFile型である。
String str = "hello world.";
//2.書き込み操作のためにストリーム・オブジェクトのメソッドを呼び出す
byte[] bytes = str.getBytes(); //文字列をバイト配列に変更する
os.write(bytes); //バイトを.txtのバイト配列である。
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//3.
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
走行結果
文字の流れ
一般的な文字入力ストリームは以下のとおりです:
Reader InputStreamReader FileReader BufferedReader
ご利用ください:
public class FileReaderDemo {
public static void main(String[] args) {
Reader r1 = null;
try {
r1 = new FileReader(new File("E:/java /a.txt"));
char[] chars = new char; //文字の配列を定義する。文字は通常1024の倍数である。
int length = 0;
//ファイルの中身が大きいことは知られていないので、1024の出力を読むループを使えば、すべての
while((length = r1.read(chars))!=-1){ // Length = r1.read(chars): r1の内容をcharsバイト配列に読み込む、戻り値はintである、ここでパラメータはchars型である、内容が-1に等しくないことは空でないことを示す
String str = new String(chars,0,length); //文字配列の内容を文字列に変換する
System.out.println(length+"--------"+str);
}
} catch (FileNotFoundException e) { //ファイルを読み込むための前提条件は、そのファイルが存在することで、そうでない場合は例外がスローされる
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
r1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
走行結果
文字出力ストリーム
一般的な文字出力ストリームは以下の通りです:
ライタ OutputStreamWriter ファイルライタ BufferedWriter
使用法: ファイルに文字列を追加
public class FileWriteDemo {
public static void main(String[] args) {
Writer fw = null;
try {
//true表面文書にあるものは上書きされず、その後ろに書かれる
fw = new FileWriter(new File("E:/java /a.txt"),true);
fw.write("tanakasan lisi");
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
走行結果
キャラクタ・キャッシュ・ストリーム
読み取り時間のFileReaderとFileWriterは、1回の読み取りまたは要求ディスクに1回書き込むので、時間の使用は非常に長く、効率が悪いので、読み取りと書き込みキャッシュとしてBufferedReaderとBufferedWriterの導入です。
1、BufferedReaderは一度に8K文字ストリームをメモリに読み込み、プログラムが文字を読み込むと、最初にBufferedReaderに読み込まれます。
2、書き込みバッファとしてBufferedWriterは、ファイルの文字ストリームをBufferedWriterに書き込むには、リフレッシュまたはディスクに書き込む前に、BufferedWriterを閉じて、ディスクの回数を減らす効率を向上させるために書き込まれます。
文字キャッシュ入力ストリーム:TXTからのデータをプログラムに追加します:
public class BufferedReaderDemo {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File("E:/java /a.txt")));
String str = null;
while((str = br.readLine()) != null){ //readLine()一行ずつ読む
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
文字キャッシュ出力ストリーム:文字列をTXTに出力します:
public static void main(String[] args) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(new File("E:/java /a.txt"),true)); //実際にストリームオブジェクトをラップする
bw.newLine(); //空行を書く
bw.write("こんにちは。");
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bw.flush(); //キャッシュされたデータをハードドライブにフラッシュする
bw.close(); //
} catch (IOException e) {
e.printStackTrace();
}
}
}
例:a.txtからd.txtへデータをコピー コード:
public class BufferedInputStreamAndBufferedOutputSream {
public static void main(String[] args) {
//a.txtdにコピーする.txt
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(new File("E:/java /a.txt"))); //
bos = new BufferedOutputStream(new FileOutputStream(new File("D:\\d.txt"))); //
byte[] bytes = new byte;
int length = 0;
while((length=bis.read(bytes))!=-1){
bos.write(bytes, 0, length);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bos.flush();
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
同じ関数のために今、操作クラスの2つのグループを使用することができますので、どのように正確に使用する方法の開発では、どちらが良いでしょうか?





