黒馬プログラマー--Java中IO流小結

3744 ワード

--------androidトレーニング、javaトレーニング、ご交流をお待ちしております!--------
ストリームの概念と役割
ストリームは、データ転送の総称または抽象である順序付き、開始および終了のバイトセットです.すなわち、データの両装置間の伝送をストリームと呼び、ストリームの本質はデータ伝送であり、データ伝送特性に基づいてストリームを各種類に抽象化し、より直感的にデータ操作を行うのに便利である.
 
IOストリームの分類
処理データ型によって、文字ストリームとバイトストリームに分けられます.
データの流れによって、入力フローと出力フローに分けられます.
 
文字ストリームとバイトストリーム
文字ストリームの由来:データ符号化の違いにより、文字を効率的に操作するストリームオブジェクトが存在する.本質は,バイトストリーム読み出しに基づいて,指定されたコードテーブルを調べることである.バイトストリームと文字ストリームの違い:
(1)読み書き単位が異なる:バイトストリームはバイト(8 bit)単位で、文字ストリームは文字単位で、コードテーブルに基づいて文字をマッピングし、一度に複数のバイトを読むことができる.
(2)処理対象が異なる:バイトストリームはすべてのタイプのデータ(例えば画像、aviなど)を処理することができ、文字ストリームは文字タイプのデータしか処理できない.
(3)バイトストリームは,操作時に自身がバッファを用いず,ファイル自体の直接操作であるが,文字ストリームは操作時にバッファを用い,バッファを介してファイルを操作するので,以下で検証する.
 
結論:バイトストリームを優先的に選択します.まず、ハードディスク(HDD)上のすべてのファイルが、画像などのコンテンツを含むバイト形式で転送または保存されているためです.しかし文字はメモリにしか形成されないため,開発ではバイトストリームが広く用いられている.
 
入力ストリームと出力ストリーム
入力ストリームに対しては読み取り操作のみ,出力ストリームに対しては書き込み操作のみを行い,プログラムでは伝送対象データの異なる特性に応じて異なるストリームを使用する必要がある.
Javaの文字ストリーム
文字ストリームは主に文字を処理するために使用されます.Javaは16ビットのUnicodeを用いて文字列と文字を表し,対応する文字ストリームを入力と出力でそれぞれreadersとwritersと呼ぶ. 
InputStreamReaderとOutputStreamWriterは、この2つのクラスに対応するストリームを構築すると、自動的に変換され、プラットフォームのデフォルトの符号化セットで符号化されたバイトをUnicode文字に変換します.英語環境では、デフォルトのエンコードセットは一般的にISO 8859-1です. 
BufferedReaderとBufferedWriterの2つのクラスに対応するストリームはバッファリングを使用しており、入出力の効率を大幅に向上させることができます.この2つもフィルタストリームであり,InputStreamReaderとOutputStreamWriterの処理によく用いられる.
例:
/*
  :             
**/
import java.io.*;

class TestCopy 
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader bufr = null;
		BufferedWriter bufw = null;
		try
		{
			bufr = new BufferedReader(new FileReader("StudentDemo.java"));//StudentDemo.java       
			bufw = new BufferedWriter(new FileWriter("student.txt"));//student.txt        
			String line = null;
			while((line=bufr.readLine())!=null)
			{
				bufw.write(line);
				bufw.newLine();
				bufw.flush();
			}
		}
		catch (IOException e)
		{
			throw new RuntimeException("      ");
		}
		finally
		{
			try
			{
				if(bufr!=null)
					bufr.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("          ");
			}
			try
			{
				if(bufw!=null)
					bufw.close();
			}
			catch (IOException ex)
			{
				throw new RuntimeException("          ");
			}
		}	
	}
}

JAVAバイトストリーム
FileInputStreamとFileOutputStreamの2つのクラスはノード・フローに属し、最初のクラスのソース・エンドと2番目のクラスの宛先はディスク・ファイルであり、ファイルのパス名で対応するフローを構築できます.
DataInputStreamとDataOutputStreamの2つのクラスで作成されたオブジェクトは、それぞれデータ入力ストリームとデータ出力ストリームと呼ばれます.これは、マシンに関係のないスタイルでJavaデータを読み書きできる2つのストリームに役立ちます.そのため、ネットワーク上のデータ伝送に適しています.この2つのストリームもフィルタストリームであり、InputStreamまたはOutputStreamのような他のストリームを入力または出力として使用することが多い.例:
/*
  :      
**/
import java.io.*;

class PicCopy 
{
	public static void main(String[] args)
	{
		BufferedInputStream bufr = null;
		BufferedOutputStream bufw = null;
		
		try
		{
			bufr = new BufferedInputStream(new FileInputStream("1.jpg"));//1.jpg    
			bufw = new BufferedOutputStream(new FileOutputStream("2.jpg"));//2.jpg     

			int line = 0;
			while((line=bufr.read())!=-1)
			{
				bufw.write(line);
			}
		}
		catch (IOException e)
		{
			throw new RuntimeException("      ");
		}
		finally
		{
			try
			{
				if(bufr!=null)
					bufr.close();
			}
			catch (IOException e)
			{
				throw new RuntimeException("          ");
			}
			try
			{
				if(bufw!=null)
					bufw.close();
			}
			catch (IOException ex)
			{
				throw new RuntimeException("          ");
			}
		}	
	}
}

印刷ストリーム、シーケンスストリーム、パイプストリームなど、他のストリームも重要です.
--------androidトレーニング、javaトレーニング、ご交流をお待ちしております!--------