I / O
I / Oとは
- 実際には、Uディスクをコンピュータに接続し、ビデオをコンピュータにコピーできる場合、このデータ転送プロセスは
- このようなデータ転送は、一種のデータフローと考えることができます。フローの方向に従って、メモリをベンチマークとして、それは入力(入力)と出力(出力)に分けられます。つまり、メモリにフローするときの入力ストリームとメモリからフローする出力ストリームです。
- JavaのIO操作は主にjava.ioパッケージの下のコンテンツを指し、入力および出力操作の場合、入力は読むデータ、出力も呼ばれます書き出すデータ
ハードディスクとメモリの動作関係を下図に示します!!!
I / O分類
データフローの方向に応じて:入力フローと出力フロー
- 入力ストリーム:他のデバイスからメモリにデータを読み取るストリーム
- 出力ストリーム:メモリから他のデバイスにデータを書き込むストリーム
データのタイプに応じて、バイトストリームと文字ストリームに分けられます。
次の図は、それらの最上位の親クラスです。
バイト出力ストリーム[OutputStream]
すべてのファイルデータ(テキスト、画像、ビデオ)が再び格納されると、それらはすべて1バイトずつ2進数の形式で格納されます。送信時間は同じであるため、バイトストリームは任意のファイルデータ
を送信でき、ストリームを操作することもできます。Yangのストリームオブジェクトが使用されているかどうかに関係なく、基になる送信は常にバイナリデータです
。java.io.OutputStream抽象クラスは、バイト出力ストリームを表すすべてのクラスの親クラスを表し、指定されたバイト情報を宛先に書き込み、定義します。バイトストリームの基本的な共通機能メソッド
注: closeメソッド。ストリームの操作が完了したら、このメソッドを呼び出してシステムリソースを解放する必要があります。
public class Demo01OutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream out = new FileOutputStream("F:\\ziwozongjie.txt");
String content = "囧囧,囧囧是世界上好看的女人!!!";
out.write(content.getBytes());
out.close();
}
}
Fドライブを見ると、ziwozongjie.txtファイルが作成され、次の文がファイルに書き込まれます。
データ書き込みの原理(メモリ->ハードディスク)
- javaプログラム-> JVM(java仮想マシン-> OS(オペレーティングシステム)->データを書き込むOS呼び出しメソッド->ファイルにデータを書き込む
データを預ける原理
public class Demo01OutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream out = new FileOutputStream("F:\\jiongjiong.txt");
out.write(97);
out.close();
}
}
データを書き込むとき、10進法は2進法に変換されます。対応するストアードは2進法です97は
テキストエディター(テキストエディター、メモ帳、またはノードパッド++)を開いたときにエンコードを照会します。テーブル、バイトを文字に変換します
。0〜127に格納されている場合は、ASCIIコードテーブルがクエリされ、97は英語の文字aに対応します。それ以外の値の場合は、システムのデフォルトコードテーブル(中国語システムGBKまたはUTF-8)が照会されます。 )
結果は小文字a
!!!注意!!!
- 一度に複数のバイトを書き込むメソッドを呼び出すとvoid write(byte [] b)
- 最初のバイトが正の数(0〜127)の場合、ASCIIコードテーブルは表示時に照会されます
- 最初のバイトが負の場合、最初のバイトと2番目のバイト、2バイトは中国語の表示を形成し、システムのデフォルトコードテーブル(GBK)を照会します。
public class Demo01OutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream out = new FileOutputStream("F:\\jiongjiong.txt");
byte[] b = {-65, -66, -67, 68, 79};
out.write(b);
out.close();
}
}
結果は文字化けしていませんが、GBKテーブルの漢字に対応しています
書き込みを追加して再開
- 文字列名、ファイルfile書き込みデータの宛先
- boolean append true:元のファイルを上書きしません。ファイルの最後に追加し続けますfalse:新しいファイルを作成し、元のファイルを上書きします
!!!コードオン!!!
public class Demo02OutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream fot = new FileOutputStream("F:\\cccc.txt", true);
String content = "您好!豆豆";
for (int i = 0; i < 10; i++) {
fot.write(content.getBytes("utf-8"));
fot.write("\r\n".getBytes());
}
fot.close();
}
}
バイト入力ストリーム[InputStream]
java.io.InputStream抽象クラスは、バイト入力ストリームのすべてのクラスを表すスーパークラスで、バイト情報をメモリに読み込み、バイト入力ストリームの基本的な共有関数メソッドを定義します。
注: closeメソッド。ストリームの操作が完了したら、このメソッドを呼び出してシステムリソースを解放する必要があります。
!!!コードオン!!!
public class Demo03FileInputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("F:\\cccc.txt");
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
}
}
!!!その結果!!!
デモファイルのコピー
public class Demo04FileInputStream {
public static void main(String[] args) throws IOException {
try (
FileInputStream fis = new FileInputStream("F:\\cccc.txt");
FileOutputStream fos = new FileOutputStream("F:\\dddd.txt");
) {
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("复制成功");
}
}
ファイルが正常にコピーされました
注:ここでは、jdk8の機能ラムダ式try ... with ...リソースを使用したので、finallyブロックでストリームを閉じる必要はありません。jdkは、このコードを最適化して... catch ...最終的に