Javaベース-10-IOフローの復習
30846 ワード
一.概要
1.ストリームの概念ストリーム:ストリームは、データを生成または受信する能力のあるオブジェクトであり、本質的にはデータ伝送であり、データソースとプログラムとの間に伝送路 を確立する役割を果たす.
2.IOフローの分類
データの流れによって入力ストリーム:外部(ディスク)データをプログラム(メモリ)に読み込む 出力ストリーム:プログラムデータがディスクに出力 データ単位でバイトストリーム:バイト単位でデータを操作し、一般的に非テキストファイル(jpg、mp 4、mp 3、doc、ppt) を処理する.文字ストリーム:文字でデータを操作し、一般的にテキストファイル(txt、java、c、cpp) を処理する.
ストリームの機能によってノードストリーム:データソースのプログラム間で直接伝送するストリーム .処理フロー:既存のフロー(ノードフローまたは処理フロー)をパッケージ(複数回可能)、伝送機能を強化するフロー .
ストリームの全体的な分類
ベースクラス
バイトストリーム
文字ストリーム
にゅうりょくりゅう
InputStream
Reader
しゅつりょくりゅう
OutputStream
Writer
ここで、ファイル、配列、パイプ、文字列クラスはノードフローであり、残りは処理フローである.
ぶんかつ
InputStream
OutputStream
Reader
Writer
ファイル
FileInputStream
FileOutputStream
FileReader
FileWriter
はいれつ
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
パイプ本
PipedInputStream
PipeOutputStream
PipedReader
PipedWriter
文字列
StringReader
StringWriter
きりかえりゅう
InputStreamReader
OutputStreamWriter
オブジェクトフロー
ObjectInputStream
ObjectOutputStream
印刷フロー
PrintStream
PrintWriter
ろ過流
FilterInputStream
FilterOutputStream
FilterReader
FilterWriter
バッファフロー
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
プッシュバック
PushbackInputStream
PushbackReader
データ・フロー
DataInputStream
DataOutputStream
*表に太字を付けたものが一般的な流れです
3.Fileクラス(java.io.File)
Fileクラスのオブジェクトは、ファイルまたはディレクトリを表し、ファイルまたはディレクトリの作成、検索、削除操作に使用されます.
Fileクラスのコンストラクタ: File(String file Path)指定されたパス文字列に基づいて新しいFileインスタンス を作成する. File(String parentPath,String childPath)親パスと子パスに基づいて新しいFileインスタンス を作成する. File(File parentFile,String childPath)親ファイルオブジェクトと子パスに基づいて新しいFileインスタンス を作成する.
Fileクラスの一般的な方法は、菜鳥チュートリアルを参照してください.
二.共通ストリームの使用
ストリームの標準化コード操作フローを使用して、読み出しを例に、同理に書き込む Fileクラスオブジェクトを作成し、読み込んだデータソースを示します.ファイルは でなければなりません.対応する入力ストリームを作成し、Fileクラスオブジェクトをパラメータとしてストリームのコンストラクタ に渡す.対応するバイトまたは文字配列 を作成する. .close()クローズフロー 異常に対するtry-catch-finally処理 1.ファイルフロー
選択の原則:純粋なテキストデータを処理する場合は、文字ストリームを優先し、それ以外はバイトストリームを使用します.
ファイルストリームを使用してtxtテキストファイルを読み込むとします.コードは次のとおりです.
txtファイルを書き込むのと同じです
2.バッファフロー
役割:デフォルトサイズ(8 kb)を内蔵したバッファ配列を作成し、バッファの読み書きにより読み書き効率を向上させる読み取り:一度にファイルから8 kbを読み取り、バッファの中にバッファがいっぱいになるまでまっすぐに存在し、次の8 kb配列の書き込みを読み取る:バッファに書き込み、書き込みまで書き込み、ファイルに書き込み、flush()を使用してバッファにファイルを強制的に書き込む
画像のコピー操作を実現
3.変換フロー InputStreamReader:バイト配列->文字配列(復号) OutputStreamWriter:文字配列->バイト配列(符号化) テキストファイルをUTF-8符号化からGBK符号化フォーマットに変換
4.印刷フロー
print()もprintln()もバイト印刷ストリームPrintStreamから
テキストファイルのコピー
5.オブジェクトフロー
シーケンス化メカニズムにより、メモリ内のJavaオブジェクトをプラットフォームに関係のないバイナリストリームに変換できます.これにより、このバイナリストリームをディスクに永続的に保存したり、ネットワークを介して別のネットワークノードに転送したりすることができます.他のプログラムがこのバイナリストリームを取得すると、元のJavaオブジェクトに復元できます. ObjectOutputStream:メモリ内のオブジェクト->ストレージファイル、ネットワーク送信(シーケンス化プロセス) ObjectInputStream:ストレージファイル、ネットワーク受信->メモリ内のオブジェクト(逆シーケンス化プロセス) オブジェクトをシーケンス化するには、次の条件を満たす必要があります. javaを実現する.io.Serializableインタフェース は、グローバル定数serialVersionUID(シーケンスバージョン番号、逆シーケンス化検証用) を提供する.オブジェクトの内部属性は、直列化可能(staticおよびtransient修飾属性は直列化不可) である必要がある.
Personクラスのオブジェクトシーケンス化の実装
1.ストリームの概念
2.IOフローの分類
データの流れによって
ストリームの機能によって
ストリームの全体的な分類
ベースクラス
バイトストリーム
文字ストリーム
にゅうりょくりゅう
InputStream
Reader
しゅつりょくりゅう
OutputStream
Writer
ここで、ファイル、配列、パイプ、文字列クラスはノードフローであり、残りは処理フローである.
ぶんかつ
InputStream
OutputStream
Reader
Writer
ファイル
FileInputStream
FileOutputStream
FileReader
FileWriter
はいれつ
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
パイプ本
PipedInputStream
PipeOutputStream
PipedReader
PipedWriter
文字列
StringReader
StringWriter
きりかえりゅう
InputStreamReader
OutputStreamWriter
オブジェクトフロー
ObjectInputStream
ObjectOutputStream
印刷フロー
PrintStream
PrintWriter
ろ過流
FilterInputStream
FilterOutputStream
FilterReader
FilterWriter
バッファフロー
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
プッシュバック
PushbackInputStream
PushbackReader
データ・フロー
DataInputStream
DataOutputStream
*表に太字を付けたものが一般的な流れです
3.Fileクラス(java.io.File)
Fileクラスのオブジェクトは、ファイルまたはディレクトリを表し、ファイルまたはディレクトリの作成、検索、削除操作に使用されます.
Fileクラスのコンストラクタ:
//
String path = "D:\\123.txt";
File file1 = new File(path);
//
String path2 = "D:\\1\\2.txt";
File file2 = new File(path2); ------------- D:\\1\\2.txt
//
String parent = "F:\\aaa";
String child = "bbb.txt";
File file3 = new File(parent, child); -------- F:\\aaa\\bbb.txt
// File
File parentDir = new File("F:\\aaa");
String child = "bbb.txt";
File file4 = new File(parentDir, child); -------- F:\\aaa\\bbb.txt
Fileクラスの一般的な方法は、菜鳥チュートリアルを参照してください.
二.共通ストリームの使用
ストリームの標準化コード操作フローを使用して、読み出しを例に、同理に書き込む
選択の原則:純粋なテキストデータを処理する場合は、文字ストリームを優先し、それ以外はバイトストリームを使用します.
ファイルストリームを使用してtxtテキストファイルを読み込むとします.コードは次のとおりです.
@Test
public void testFileReader() throws IOException {
//1.File
File file = new File("Hello.txt");
//2.FileReader
FileReader fr = new FileReader(file);
//3. read(char[] c): c , , -1
char[] c = new char[5];
int len;
while((len = fr.read(c)) != -1){
String str = new String(c, 0, len);
System.out.print(str);
}
//4.
fr.close();
}
txtファイルを書き込むのと同じです
@Test
public void testFileWriter() throws IOException {
//1.File
File file = new File("Hello.txt");
//2.FileWriter
FileWriter fw = new FileWriter(file);
//3.
fw.write("Hello, world!
");
//4.
fw.close();
}
2.バッファフロー
役割:デフォルトサイズ(8 kb)を内蔵したバッファ配列を作成し、バッファの読み書きにより読み書き効率を向上させる読み取り:一度にファイルから8 kbを読み取り、バッファの中にバッファがいっぱいになるまでまっすぐに存在し、次の8 kb配列の書き込みを読み取る:バッファに書き込み、書き込みまで書き込み、ファイルに書き込み、flush()を使用してバッファにファイルを強制的に書き込む
画像のコピー操作を実現
@Test
public void testBufferedStream(){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//1.
File srcFile = new File(" 1.jpg");
File destFile = new File(" 2.jpg");
//2.
//2.1
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
//2.2 ,
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//3. 、
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1){
bos.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.
if (bos != null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bis != null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3.変換フロー
@Test
public void test() {
InputStreamReader isr = null;
OutputStreamWriter osw = null;
try {
//1. 、
File file1 = new File("dbcp_utf8.txt");
File file2 = new File("dbcp_gbk.txt");
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
isr = new InputStreamReader(fis, "utf-8");
osw = new OutputStreamWriter(fos, "gbk");
//2.
char[] cbuf = new char[20];
int len;
while ((len = isr.read(cbuf)) != -1){
osw.write(cbuf,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//3.
if (isr != null){
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (osw != null){
try {
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4.印刷フロー
print()もprintln()もバイト印刷ストリームPrintStreamから
テキストファイルのコピー
@Test
public printTest(){
BufferedReader br = new BufferedReader(new FileReader("copy.txt"));
PrintStream ps = new PrintStream("printcopy.txt");
String line;
while((line = br.readline()) != null){
ps.println(line);
}
br.close();
ps.close();
}
5.オブジェクトフロー
シーケンス化メカニズムにより、メモリ内のJavaオブジェクトをプラットフォームに関係のないバイナリストリームに変換できます.これにより、このバイナリストリームをディスクに永続的に保存したり、ネットワークを介して別のネットワークノードに転送したりすることができます.他のプログラムがこのバイナリストリームを取得すると、元のJavaオブジェクトに復元できます.
Personクラスのオブジェクトシーケンス化の実装
@Test
public void personSerializeTest(){
Person p = new Person();
p.name = " ";
p.age = 28;
try{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Person.dat"));
oos.writeObject(p);
oos.close();
fileOut.close();
}catch(IOException i){
i.printStackTrace();
}
}