2022/02/26 Javaの各種機能


Java I/O用I/Oストリーム
I/Oフロー
  • ネットワークの例、すなわち、データストリームは水流に等しい.
  • JavaはI/Oストリームを通じて各種I/O機器とは独立した一貫したI/Oを提供する
  • ファイルディスク、キーボード、マウス、ネットワーク、およびメモリの入出力
  • I/Oフローの区分
  • ターゲット:入力ストリーム/出力ストリーム
  • データ型:バイトストリーム/文字ストリーム
  • 機能:ベースフロー/アシストフロー
  • 入力ストリームと出力ストリーム
  • 入力ストリーム:ターゲットからデータを取得するストリーム
  • 出力ストリーム:ターゲットにデータを出力するストリーム
  • ストリームタイプ
    入力フロー:FileInputStream、FileReader、BufferedInputStream、BufferedReaderなど
    出力ストリーム:FileOutputStream、FileWider、BufferedOutputStream、BufferedWriterなど
  • バイトストリームと文字ストリーム
  • バイトストリーム:ビデオ、音楽ファイル、実行可能ファイルなどのデータの読み取りおよび書き込みに使用される
  • .
  • 文字ストリーム:データがバイト単位で処理されると文字が破壊され、データストリームのバイト数が2個を超えて符号化に適している
  • ストリームタイプ
    バイトストリーム:FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream
    文字ストリーム:FileReader、FileWriter、BufferedReader、BufferedWriterなど
  • ベースフローとセカンダリフロー
  • ベースのストリーム:
  • ストリームで、直接ターゲットへの読み書きをサポート
  • アシストストリーム:ストリーム
  • は、直接読み書きを必要とせずに追加の機能を提供します.
  • アシストストリームは直接読み書き機能を持たないため、作成者のパラメータとしてベースストリームまたは他のアシストストリームを常に含む
  • ストリームタイプ
    ベースフロー:FileInputStream、FileOutputStream、FileReader、FileWriterなど
    2次フロー:InputStreamReader、OutputStreamWriter、BufferedInputStream、BufferedOutputStreamなど
  • 標準I/Oストリーム
    システムクラスの標準I/Oメンバー
    public class System{ 
    	public static PrintStream out; 
    	public static InputStream in; 
    	public static PrintStream err; 
    }
    
  • System.out
    ひょうじゅんしゅつりょくストリーム
    System.out.println(「出力メッセージ」);
  • System.in
    標準入力(キーボード)フロー
    int d=System.in.read()/シングルバイト読み出し
  • System.err
    ひょうじゅんエラーしゅつりょくストリーム
    System.err.println(「エラーメッセージ」);
  • バイトレベルI/Oストリーム
    InputStream

  • バイト入力ストリームの最上位抽象クラス

  • 多くの抽象メソッドが宣言され、サブストリームによって継承され、実装されています.

  • プライマリサブクラス
    FileInputStream:ファイルから材料をバイト単位で読み込みます.
    ByteArrayInputStream:バイトアレイメモリにバイト単位でデータを読み込みます.
    FilterInputStream:セカンダリ・ストリームの親であり、ベース・ストリームでデータを読み込むときに他の機能を提供する

  • 主な方法
    int read():入力ストリームから1バイトのデータを読み出します.読み込んだデータのバイト数を返します.
    int read(byte b[]):入力ストリームからb[]サイズの資料をb[]に読み出す.読み込んだデータのバイト数を返します
    int read(byte b[],int off,int len):読み出したストリームからb[]サイズのデータを格納し、読み出したlenサイズのデータのバイト数を返す
    void close():入力ストリームに関連付けられたターゲットリソースを閉じます.
  • FileInputStreamの例
  • ファイルから
  • を1バイトずつ読み出す.
    public class FileInputStreamTest1 {
        public static void main(String[] args) {
            FileInputStream fis=null;
            try {
                fis=new FileInputStream("input.txt");
                System.out.println((char)fis.read());
                System.out.println((char)fis.read());
                System.out.println((char)fis.read());
    
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }catch (Exception e2){
                    System.out.println(e2);
                }
            }
            System.out.println("end");
    
        }
    }
    
  • ファイルを1バイトずつ最後の
  • に読み込む.
    public class FileInputStreamTest2 {
    
    	public static void main(String[] args) {
    
    		try(FileInputStream fis = new FileInputStream("input.txt")){ 
    			int i;
    			while ( (i = fis.read()) != -1){
    				System.out.println((char)i);
    			}
    			System.out.println("end");
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    
  • ファイルからバイト配列のデータを読み出す(配列に残りのデータがある可能性があることに注意してください)
  • public class FileInputStreamTest3 {
    
    	public static void main(String[] args) {
    		 		
    		try (FileInputStream fis = new FileInputStream("input2.txt")){
    			
    			byte[] bs = new byte[10];
    			int i;
    			while ( (i = fis.read(bs)) != -1){
    				/*for(byte b : bs){
    					System.out.print((char)b);
    				}*/
    				for(int k= 0; k<i; k++){
    					System.out.print((char)bs[k]);
    				}
    				System.out.println(": " +i + "바이트 읽음" );
    			}
    			 
    			/*while ( (i = fis.read(bs, 1, 9)) != -1){
    				for(int k= 0; k<i; k++){
    					System.out.print((char)bs[k]);
    				}
    				System.out.println(": " +i + "바이트 읽음" );
    			}*/
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		System.out.println("end");
    	}
    }
    
    QRSTもあるので、第3話の時にQRSTを見ることができます.

    OutputStream

  • バイトレベル出力ストリームの最上位抽象クラス

  • 多くの抽象メソッドが宣言され、サブストリームによって継承され、実装されています.

  • プライマリサブクラス
    FileOutputStream:ファイルにバイトでデータを書き込む
    ByteArrayOutputStream:バイトアレイメモリにバイト単位でデータを書き込む
    FilterOutputStream:ベースストリームにデータを書き込む際の追加機能を提供するセカンダリストリームの親

  • 主な方法
    int write():1バイト出力
    int wirte(byte b[]):b[]サイズの資料を出力
    int write(byte b[],int off,int len):b[]配列内のデータのoff位置からlenの数でデータを出力する
    void flush():一時保存データの出力バッファを強制的に解放してデータを出力する
    void close():出力ストリームに関連付けられたターゲットリソースを閉じます.出力バッファが空です
  • flush()とclose()メソッド
    flush()メソッドを使用して
  • 出力バッファ
  • をクリア
  • close()メソッドでflush()が呼び出されるため、close()メソッドが呼び出されると出力バッファは空の
  • となる.
    文字単位のI/Oストリーム
    Reader

  • 文字入力ストリームの最上位抽象クラス

  • 多くの抽象メソッドが宣言され、サブストリームによって継承され、実装されています.

  • プライマリサブクラス
    FileReader:ファイルから文字単位で読み込まれたストリームクラス
    InputStreamReader:バイト単位で読み取ったデータを文字に変換するためのセカンダリストリームクラス
    BufferedReader:サブストリームで、文字を読み取るときに配列を提供し、1回の読み取り機能を提供します.

  • 主な方法
    int read():ファイルから文字を読み出します.既読文字を返す
    int read(char[]buf):buf配列の文字をファイルから読み出す
    int read(char[]buf,int off,int len):buf配列のoff位置からlen個数までの文字をファイルから読み出す
    void close():入力ストリームに関連付けられたターゲットリソースを閉じる
  • FileReader
  • ファイルから文字
  • を読み込む.
    public class FileReaderTest {
        public static void main(String[] args) {
            try(FileReader fr=new FileReader("reader.txt")){
                int i;
                while ((i =fr.read())!=-1){
                    System.out.print((char) i);
                }
            }catch(IOException e){
                System.out.println(e);
            }
    
        }
    }
    Writer

  • 文字単位出力ストリームの最上位抽象クラス

  • 多くの抽象メソッドが宣言され、サブストリームによって継承されて実装されています.

  • プライマリサブクラス
    FileWriter:ファイルに文字単位で出力されるストリームクラス
    OutputStreamWriter:バイト単位のデータを文字に変換して出力する補助ストリームクラス.
    BufferedWriter:サブストリーム、文字の書き込み時に配列を提供し、一括書き込み機能を提供する

  • 主な方法
    int write(int c):ファイルに1文字を書き込む
    int write(char[]buf):文字配列bufの内容を出力する
    int write(char[]buf,int off,int len):文字配列bufのoff位置からlen個数を出力する文字
    int write(String str):出力文字列str
    int wirte(String str,int off,int len):文字列strのoff文字からlenを出力する個数
    int flush():出力する前に、データがあるスペース(出力バッファ)を空けて出力してください
    void close():ストリームに関連するリソースを閉じ、出力バッファも空
  • 多くの補助フロークラス
    ほじょりゅう
  • ストリーム
  • は、実際の読み書きストリームではなく、補助機能を提供する.
  • FilterInputStreamおよびFilterOutputStreamは、セカンダリストリームの最上位
  • です.
  • 作成者のパラメータで、別のストリーム(ベースストリームまたは他の補助ストリーム)
  • を持つ
  • Decorator Pattern,
  • 親作成者
    保護されたFilterInputStreamと:構造関数のパラメータとしてInputStreamを受け入れる
    共通FilterOutputStream(OutputStream out):構造関数のパラメータとしてOutputStreamを受信する

  • InputStreamReaderとOutputStreamWriter
    補助ストリームは、
  • バイト単位の読み書き材料を文字に変換するために使用される
  • FileInputStream読み出したデータを文字に変換
    public class InputStreamReaderTest {
    
    	public static void main(String[] args) {
    
    		try(InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))){
    			int i;
    			while( (i = isr.read()) != -1){  //보조 스트림으로 읽습니다.
    				System.out.print((char)i);
    			}
    		}catch(IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    BufferedInputStreamとBufferedOutputStream
    2番目のストリーム
  • は、
  • の約8 Kのアレイを提供し、高速I/Oを実現する
  • BufferedReaderおよびBuffered Writerは、文字にI/O補助ストリーム
  • を提供する.
  • BufferedInputStreamおよびBufferedOutputStreamを使用してファイルをコピーする
    public class BufferedStreamTest {
    
    	public static void main(String[] args) {
    
    		long millisecond = 0;
    		try(FileInputStream fis = new FileInputStream("a.zip");
    				FileOutputStream fos = new FileOutputStream("copy.zip");
    				BufferedInputStream bis = new BufferedInputStream(fis);
    				BufferedOutputStream bos = new BufferedOutputStream(fos)){
    		
    			millisecond = System.currentTimeMillis();
    			
    			int i;
    			while( ( i = bis.read()) != -1){
    				bos.write(i);
    			}
    			
    			millisecond = System.currentTimeMillis() - millisecond;
    		}catch(IOException e) {
    			e.printStackTrace();
    		}
    		
    		System.out.println("파일 복사 하는 데 " + millisecond + " milliseconds 소요되었습니다.");
    	}
    }
    
    DataInputStreamとDataOutputStream
  • ストリーム
  • メモリに格納
  • DataInput Streamメソッド
  • DataOutputStreamメソッド