JAva学習四(バイトストリームと文字ストリーム)

4458 ワード

詳細
    バイトストリームと文字ストリームとは、どのような違いがありますか.どのストリームを使用しますか.ずっと迷っていたので、今日は資料を調べて答えを見つけて、記録だけしました.
    streamの末尾はバイトストリームであり、readerとwriterの末尾は文字ストリームである.
    両者の違いは、読み書きの場合、1つはバイトで読み書きし、1つは文字で書くことです.バイトストリームは、操作時にバッファ(メモリ)が使用されず、ファイル自体が直接操作され、文字ストリームは操作時にバッファが使用され、バッファを介してファイルが操作されます.

        @Test
	public void test1() throws IOException{
		System.out.println("this is SuiteTest1.test1");
		//  1 :  File           
	     File f = new File("d:" + File.separator + "test.txt"); //   File        
	//  2 :               
	     OutputStream out = null;
	     String str = "Hello World!!!";  
	     byte b[] = str.getBytes();
	//               
	     try {
		 out = new FileOutputStream(f);
	    	 out.write(b);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
	 //  4 :       
	    // out.close();                  
	//        
	}

このときバイトストリーム操作は閉じられなかったが,ファイルにも出力の内容が存在し,バイトストリームがファイル自体を直接操作していることを証明した.

        @Test
	public void test1() throws IOException{
		System.out.println("this is SuiteTest1.test1");
		//  1 :  File           
	     File f = new File("d:" + File.separator + "test.txt"); //   File        
	//  2 :             
	     Writer out = null;
	     String str = "Hello World!!!";
	//               
	     try {
	    	  out = new FileWriter(f); 
		  out.write(str); 
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
	 //  4 :      
	    // out.close();                  
	//        
	}

    プログラムが実行されると、ファイルには何もないことがわかります.これは、文字ストリーム操作時にバッファが使用され、文字ストリームを閉じるとバッファ内の内容が強制的に出力されますが、プログラムが閉じていないとバッファ内の内容は出力できないため、文字ストリームはバッファが使用され、バイトストリームはバッファが使用されません.

@Test
	public void test1() throws IOException{
		System.out.println("this is SuiteTest1.test1");
		//  1 :  File           
	     File f = new File("d:" + File.separator + "test.txt"); //   File        
	//  2 :               
	     //OutputStream out = null;  
	     Writer out = null;
	     String str = "Hello World!!!";  
	     //byte b[] = str.getBytes();
	//               
	     try {
			//out = new FileOutputStream(f);
	    	//out.write(b);
	    	 out = new FileWriter(f); 
			 out.write(str); 
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
	 //  4 :       flush           
	     out.flush();
	    //out.close();             
	}

    test.txtファイルに書き込まれている内容を確認し、closeまたはflushが文字ストリームをファイルに書き込むことを証明します.
    ファイルを読み書きするには、特定の文字を比較するなど、コンテンツを行単位で処理する必要があります.ある行のデータを処理するときは、通常、文字ストリームが選択されます.ファイルを読み書きするだけで、ファイルの内容に関係なく、バイトストリームが一般的に選択されます.
    JAva.io.Readerとjava.io.InputStreamはJava入力クラスを構成しています.
    Readerは16ビット文字、すなわちUnicode符号化文字を読み込むために使用される.InputStreamは、ASCII文字とバイナリデータを読み込むために使用されます.
    Readerは16ビットのUnicode文字出力をサポートし、InputStreamは8ビットの文字出力をサポートします.
    ReaderとInputStreamはそれぞれI/Oライブラリが提供する2つの平行独立した等級機構である.
    1byte = 8bits
    InputStream、OutputStreamは8ビットを扱うためのストリームであり、Reader、Writerは16ビットを扱うためのストリームである.
    JAVA言語ではbyteタイプが8位、charタイプが16位なので、中国語の処理にはReaderとWriterが必要です.
    説明に値するのは、この2つの等級機構の下で、もう1つの橋梁InputStreamReader、OutputStreamWriterがInputStreamからReaderへの適合、OutputStreamからWriterへの適合を担当していることだ.変換例:InputStreamReader isr=new InputStreamReader(new FileInputStream(「D:\demo.txt」)
    Javaでは、異なるタイプのReader入力ストリームが異なるデータソースに対応しています.
    FileReaderはファイルから入力するために使用されます.CharArrayReaderは、プログラム内の文字配列から入力するために使用されます.StringReaderは、プログラム内の文字列から入力するために使用されます.PipedReaderは、別のスレッドからPipedWriterがパイプに書き込まれたデータを読み込むために使用されます.
    対応するタイプのInputStream入力ストリームは、FileInputStream、ByteArrayInputStream、StringBufferInputStream、PipedInputStreamの異なるデータソースに対応しています.
    また、Readerタイプに対応していない2つのInputStream入力ストリームがあります.Socketはソケットに使用されます.URLConnectionはURL接続用です.この2つのクラスはgetInputStream()を使用してデータを読み込みます.
    これに応じてjava.io.Writerとjava.io.OutputStreamにも似たような違いがあります.