I/O - (3)


ほじょりゅう


他のストリームに接続し、さまざまな便利な機能を提供するストリーム.
(文字変換、I/O性能向上、マスター/オブジェクトタイプI/O等)

作成


ジェネレータに接続するストリームをパラメータとして使用します.
InputStream is = System.in;
InputStreamReader reader = new InputStreamReader(is);
上記の例に示すように、InputStreamReaderはReaderのサブクラスであるため、文字単位でデータを読み出すことができる.

ほじょりゅうチェーン


別の補助ストリームを補助ストリームに接続することもできます.これを補助流鎖と呼ぶ.

もじへんかんほじょりゅう


ソースストリームはバイトベースですが、データが文字の場合に使用されます.

InputStreamReader


バイトベースのInputStreamを文字ベースのリーダに変換します.
InputStream is = System.in;
// 콘솔로부터 얻는 InputStream이기 때문에 문자만 입력받음
Reader reader = new InputStreamReader(is);
// Reader로 변환하면 강제 캐스팅이나 문자 배열로 바꾸는 작업이 생략됨

FileInputStream fis = new FileInputStream("C:/file.txt");
Reader reader = new InputStreamReader(fis);

OutputStreamWriter


バイトベースのOutputStreamを文字ベースのWriterに変換します.
FileOutputStream fos = new FileOutputStream("C:/file.txt"):
Writer writer = new OutputStreamWriter(fos);

パフォーマンス向上のための補助フロー


I/OソースがI/O速度に与える影響


ハードディスク(HDD)では、rpm数が低い場合、データの受信速度が遅くなります.ネットワークが遅い場合もそうです.環境が悪いと、プログラムの実行も環境が悪いため、プログラムのパフォーマンスが低下します.

バッファによる解決


I/Oソースと直接動作するのではなく、バッファとともに動作する場合、プログラムはパフォーマンスの良いバッファとワークスペースを使用するため、データを迅速に転送または受信することができます.ストレージデバイスの場合、バッファからデータを一度に交換することができ、I/O回数を減らすことができます.

BufferedInputStream, BufferedReader


BufferedInputStream bis = new BufferedInputStream(바이트 입력 스트림);
BufferedReader br = new BufferedReader(문자 입력 스트림);

使用例


次の例では、BufferedInputStreamを使用すると、ファイルの読み取り速度が速くなります.
public static void main(String[] args) throws Exception {
    long start = 0;
    long end = 0;

    File file = new File("용량이 적당히 있는 파일 경로");
    FileInputStream fStream1 = new FileInputStream(file);
    System.out.println("File 크기 : " + file.length()/1024 + "KB");

    System.out.println("바이트 기반 읽기 시작");
    start = System.currentTimeMillis();

    while(fStream1.read() != -1);
    end = System.currentTimeMillis();
    System.out.println("버퍼 미사용 시 걸린 시간 : " + (end - start) + "ms");

    fStream1.close();

    fStream1 = new FileInputStream(file);
    BufferedInputStream fStream2 = new BufferedInputStream(fStream1);

    System.out.println("버퍼 기반 읽기 시작");
    start = System.currentTimeMillis();

    while(fStream2.read() != -1);
    end = System.currentTimeMillis();
    System.out.println("버퍼 사용 시 걸린 시간 : " + (end - start) + "ms");
    // 실질적으로 읽는 스트림은 주 스트림
    // 읽어온 데이터를 빨리 처리해주는 역할을 하는 것이 보조스트림

    fStream2.close();
    fStream1.close();

}

BufferedOutputStream, BufferedWriter


BufferedOutputStream bis = new BufferedOutputStream(바이트 출력 스트림);
BufferedWriter br = new BufferedWriter(문자 출력 스트림);

基本タイプI/O補助フロー


バイトベースのストリーム入出力基本タイプを使用しようとすると、時間がかかり、パフォーマンスも低下します.そこで、基本タイプ単位でI/Oを行うために補助ストリームを使用します.DataInputStream、DataOutputStreamがあります.
DataInputStream dis = new DataInputStream(바이트 입력 스트림);
DataOutputStream dos = new DataOutputStream(바이트 출력 스트림);

方法



プリンタ補助ストリーム


出力操作で改行が必要な箇所が多い場合は、PrintStreamとPrintWriter(文字ベース)を使うと便利です.System.outもPrintStreamインスタンスです.

方法



このほかprintfメソッドもあり、c言語、c++と同じ使い方です.

PrintStreamの使用例

public static void main(String[] args) throws Exception{
    File file = new File("경로\\writer.txt");
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    PrintStream printStream = new PrintStream(fileOutputStream);

    printStream.println("프린트스트림으로 출력1");
    printStream.println("sadfdsaffasdf");
    printStream.flush();

    printStream.close();
    fileOutputStream.close();
}

コンソールI/O


コンソールとは?


システムを使用するために、キーボードで入力を受信し、画面で出力するソフトウェア.Unix、Linux端末、Windowsのcmd、EclipseまたはInteljのコンソールビュー.

System.in


InputStreamタイプ、バイトベースの入力ストリーム.読み込んだデータはAskyコード値からbyte値として格納される.
InputStream is = System.in; // 0 입력
int utfCode = is.read(); // 48
char inputChar = (char)is.read(); // '0'
byte配列読み取りを使用すると、トルコは行シードが配列に入るように処理されるため、文字列を受信するときに最後のバイトを削除する必要があります.
InputStream inputStream = System.in;
byte[] bArr = new byte[100];
System.out.print("이름 : ");

int nameBytes = inputStream.read(bArr);
String name = new String(bArr, 0, nameBytes - 1);
System.out.println(name);

System.out


PrintStreamタイプの出力ストリームは、OutputStreamタイプに変換できます.
アスキーコード値をパラメータとしてwriteメソッドに入れると、文字が出力されます.
OutputStream os = System.out;
byte b = 97;
os.write(b); // 문자
os.flush();
文字列を出力するには、バイト配列を取得する必要があります.
byte[] nameBytes = "홍길동".getBytes();
os.write(nameBytes);
os.flush();
printstreamメソッド(printlnなど)を使用すると簡単です.
System.out.println("~~~");

コンソールクラス


Java 6からは、コンソールに入力された文字列を読みやすくするために提供されるクラスです.System.console()という静的メソッドを使用してアクセスします.
Console console = System.console();
IDEのコンソールビューで、システム.呼び出しconsole()はnullを返すので、cmdで呼び出さなければなりません.

String readLine()


入力Enterより前のすべての文字列を読み込みます.
Console console = System.console();

String id = console.readLine();
System.out.println(id);

char[] readPassword()


キーボード入力文字はコンソールに表示されず、文字列が読み込まれます.
Console console = System.console();

char[] pw = console.readPassword();
System.out.println(Arrays.toString(pw));

Scannerクラス


コンソールクラスの欠点


文字列はConsoleクラスの欠点を補うために作成されたクラスで、整数、実数などの基本タイプを読み取ることができます.
Scanner scanner = new Scanner(System.in);
nextBoolean()、nextByte()、…などの方法で、すべてのデフォルトタイプ値を直接読み込むことができます.また、行全体を読み出してStringに戻るnextLine()メソッドもあります.