Java IOストリームのバイトストリームの概要1

ここに画像の説明を挿入

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 ...最終的に

元の記事24件を公開 賞賛された33件 訪問2391件

おすすめ

転載: blog.csdn.net/weixin_41241629/article/details/104323586