簡単な紹介 - JavaのIOストリームは、()の説明します

ファイルを転送するプログラムでストリーミングされています。JavaのIOストリームを使用するためにJavaを使用してファイルを転送する必要があり、私たちはそう。


1、概念およびフローアクション

フロー:任意のデータソースの代表的なオブジェクトまたは受信端末出力データ能力は、<Javaで考える>オブジェクトデータを受信することができます

エッセンスストリーム:データ伝送、フロー抽象的な、より直感的に便利なデータ操作の様々なタイプのデータ伝送特性。

処置:データ・ソースと宛先の搬送経路を確立します


2、JavaのIOで使用するモデル

JavaのIOモデルのデザインは、それがデコレータ(デコレータ)モード(このブログは何Decoratorパターンのの詳細な説明で使用して、非常に良いですが、ポータル機能ストリームで割った値)を、あなたは動的に必要な機能を得るために、これらのストリームを組み立てることができます。

       たとえば、バッファリングされたファイルの入力ストリームを必要とし、それは組み合わせFileInputStreamをBufferedInputStreamを使用する必要があります。


3、IOストリームの分類

    入出力ストリーム:①、データは、異なる流れに分割されます。

          出力:ディスクへの出力内容(メモリ)プログラム、光学ディスク・ストレージ・デバイス

          入力:読み出したプログラム(メモリ)内に外部データ(データディスク、光ディスク記憶装置)

画像


    バイトストリームと文字ストリーム:②、データ処理の異なるタイプに応じて分割されます。

          バイトストリーム:バイナリファイルの読み取りと書き込みを行うと、ドキュメントの任意のタイプで使用することができます。

          文字ストリーム:テキストファイルを読み書きするために使用することができます。


     バイトストリームと文字ストリームの違い

     原点文字ストリーム:Javaは、Unicode標準、16ビット文字、表現するために2つのバイトを使用して、すなわち文字の文字を使用することです。このため、JAVAは、ストリーミングの文字を導入しました。異なるデータを符号化するので、それによって文字の効率的な動作を持つオブジェクトをストリーミングします。実際には、本質的に読み取りバイトストリームに基づいた場合、指定されたコード表を確認してください。

     両者の差:(1 = 2バイト文字、バイト(バイト)を8ビット(「ビット)=、文字長が2バイトです)

  1. 異なるリーダ部:文字の文字列、バイトストリームのバイト、文字はコードテーブルマッピングによれば、複数のバイトを読み取ることができます。
  2. 異なる処理された:バイトストリームは、文字ストリームは、文字データの種類を扱うことができる(例えば画像など、aviファイル、など)あらゆる種類のデータを扱うことができます。
  3. それは、バッファで使用されます後の動作中に、バッファが通過来ていると文字ストリーム、操作自体の時点でのバイトストリームをバッファに使用されていない、ファイル自体を直接操作する:異なるキャッシュアクションファイル。

     概要:優先バイトストリーム。ハードドライブ上のすべてのファイルは、写真や他のコンテンツを含む、送信または格納されたバイトの形をしているので。文字はとても開発、バイトストリームでは、広く使われている、メモリにのみ形成されることになります。(例えばTXTファイルなど)、プレーンテキストデータがない限り、バイトストリームを使用するだけでなく、文字ストリームを使用することが好ましいです。


     ③、さまざまな機能に応じて分割:ノードの流れと処理フロー。

     ノードストリーム:から、または特定の場所(ノード)に対して読み取りおよび書き込みデータ。FileInputStreamを、FileReaderのような。

     プロセスフロー:パッケージですと、既存のフロー、データを読み書きするためにカプセル化関数コールフロースルーに接続されています。BufferedReaderのよう。コンストラクタの処理フローは、引数として一つの他のストリームオブジェクトをもたらすに常にあります。ストリームオブジェクトは、いくつかの他の包装・ストリームの後に、リンクフローと呼ばれます。

     ノードストリームは、導管、パイプライン内のファイル転送のように理解することができる、ストリームは文書に直接作用です。

     プロセスフローストリームが既にノードに基づいて作用する、ノードがパッケージ(多層であってもよい)パイプフローのうちで、その目的は、高速伝送することができる導管内に流れるようになります。

画像


4、抽象ストリームの4つの基本型は、すべてのストリームは、これらの4つを継承します。

入力ストリーム 出力ストリーム
バイトストリーム InputStream OutputStream
文字ストリーム 読者 ライター


  図は、JavaのIOを詳細にこれらのストリームの使用について説明しますブログの後ろストリーム全体的なアーキテクチャ図です。

画像

   あなたはバイトストリーム入力と出力の使用で非常に多くのクラスが選択または文字ストリーム入力と出力、それを選択しているので、力は、非常に無知だろう上記の絵を見るのはいつですか?実際には、難しいことではありません。

  1. データは、あなたはCDのプログラムでディスクを読みたい場合は、入力ストリーム、出力ストリーム、およびその逆を選択します。
  2. あなたは、オーディオとビデオのデータである転送したい場合は、それは確かにバイトストリームです。個々のは、(TXTなど)、プレーンテキストファイル、そして文字列である場合。実際には、すべてのデータは、バイトストリームが、効率の問題のレベルを使用することができます。
  3. 上記の二つのニーズは(そのような流れは、高流量、等を変換する必要があるかどうかなど)は、追加の機能を必要とするかどうかに応じて、その後決定され、ストリームの適切なノードを選択することができ、そして。

画像


5、IO流常用到的五类一接口

      Java IO流中所有的接口和类都放在java.io这个包下。其中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable。如掌握了这些IO的核心使用方法,那么就能把Java IO流玩弄于股掌之中,将它放在手中任意盘它006DDA0B006DDA0B006DDA0B

     它们的详细介绍如下:

     ①. File(文件特征与管理):File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。 

     ②. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。

     ③. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

     ④. Reader(文件格式操作):抽象类,基于字符的输入操作。

     ⑤. Writer(文件格式操作):抽象类,基于字符的输出操作。

     ⑥. RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。

     ⑦. Serializable(序列化操作):是一个空接口,为对象提供标准的序列化与反序列化操作。


6、Java IO流对象介绍

    ①、字节输入流InputStream

画像

    根据上图介绍各个类的作用:

  1. InputStream:字节输入流基类,是所有的字节输入流的父类,它是一个抽象类。
  2. FileInputSream:文件输入流。它通常用于对文件进行读取操作。
  3. FilterInputStream :过滤流。作用是为基础流提供一些额外的功能。装饰者模式中处于装饰者,具体的装饰者都要继承它,所以在该类的子类下都是用来装饰别的流的,也就是处理类。
  4. BufferedInputStream:缓冲流。对处理流进行装饰,增强,内部会有一个缓存区,用来存放字节,每次都是将缓存区存满然后发送,而不是一个字节或两个字节这样发送。效率更高。
  5. DataInputStream:数据输入流。它是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。
  6. PushbakInputStream:回退输入流。java中读取数据的方式是顺序读取,如果某个数据不需要读取,需要程序处理。PushBackInputStream就可以将某些不需要的数据回退到缓冲中。
  7. ObjectInputStream:对象输入流。用来提供对“基本数据或对象”的持久存储。通俗点讲,也就是能直接传输对象(反序列化中使用)。
  8. PipedInputStream:管道字节输入流。它和PipedOutputStream一起使用,能实现多线程间的管道通信。
  9. SequenceInputStream:合并输入流。依次将多个源合并成一个源。
  10. StringBufferInputStream:字符相关流。已经过时不多说。
  11. ByteArrayInputStream:字节数组输入流,该类的功能就是从字节数组(byte[])中进行以字节为单位的读取,也就是将资源文件都以字节的形式存入到该类中的字节数组中去,我们拿也是从这个字节数组中拿。



    ②、字节输出流OutputStream

画像

    根据上图介绍各个类的作用:

  1. OutputStream:字节输出流基类,是所有的字节输出流的父类,它是一个抽象类。
  2. FileOutputStream:文件输出流。该类实现了一个输出流,将数据输出到文件。
  3. FilterOutputStream :过滤流。用来封装其它的输出流,并为它们提供额外的功能(序列化中使用)。它主要包括BufferedOutputStream, DataOutputStream和PrintStream。
  4. BufferedOutputStream:缓冲输出流。给输出流提供缓冲功能。
  5. DataOutputStream:是用来装饰其它输出流,将DataOutputStream和DataInputStream输入流配合使用,“允许应用程序以与机器无关方式从底层输入流中读写基本 Java 数据类型”。
  6. PrintStream:是用来装饰其它输出流。它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
  7. ObjectOutputStream:对象输出流。该类将实现了序列化的对象序列化后写入指定地方。 
  8. PipedOutputStream:管道字节输出流。它和PipedInputStream一起使用,能实现多线程间的管道通信,是管道的发送端。
  9. ByteArrayOutputStream:字节数组输出流。该类实现了一个输出流,其数据被写入由byte数组充当的缓冲区,缓冲区会随着数据的不断写入而自动增长。



    ③、字符输入流Reader

画像

    根据上图介绍各个类的作用:

  1. Reader:是所有的输入字符流的父类,它是一个抽象类。
  2. CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。
  3. PipedReader 是从与其它线程共用的管道中读取数据。
  4. BufferedReader是一个装饰器,它和其子类LineNumberReader负责装饰其它Reader对象。
  5. InputStreamReader:是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream 转变为Reader 的方法。我们可以从这个类中得到一定的技巧。Reader 中各个类的用途和使用方法基本和InputStream 中的类使用一致。后面会有Reader 与InputStream 的对应关系。
  6. FilterReader 是所有自定义具体装饰流的父类,其子类PushbackReader 对Reader对象进行装饰,会增加一个行号。



    ④、字符输出流Writer

画像

    根据上图介绍各个类的作用:

  1. Writer:是所有的输出字符流的父类,它是一个抽象类。
  2. CharArrayWriter、StringWriter 是两种基本的介质流,它们分别向Char 数组、String 中写入数据。PipedWriter 是向与其它线程共用的管道中写入数据,
  3. BufferedWriter 是一个装饰器为Writer 提供缓冲功能。
  4. PrintWriter 和PrintStream 极其类似,功能和使用也非常相似。
  5. OutputStreamWriter:是OutputStream 到Writer 转换的桥梁,它的子类FileWriter 其实就是一个实现此功能的具体类(具体可以研究一SourceCode)。功能和使用和OutputStream 极其类似。


7、字符流与字节流转换

     转换流的作用:文本文件在硬盘中以字节流的形式存储时,通过InputStreamReader读取后转化为字符流给程序处理,程序处理的字符流通过OutputStreamWriter转换为字节流保存。

     转换流的特点:其是字符流和字节流之间的桥梁

          可对读取到的字节数据经过指定编码转换成字符

          可对读取到的字符数据经过指定编码转换成字节

     何时使用转换流?

          ときにバイトと文字の間でスイッチング動作。

          データフローの操作が符号化又は復号化を必要とします。

     具体的なオブジェクトが反映します:

          InputStreamReaderの(でのInputStream):バイトストリームに文字ストリーム入力。

          OutputStreamWriter(OUTSTREAMアウト):バイトの文字ストリーム出力ストリーム。

    ストリームオブジェクトでこれらの2つの文字システムのメンバーである、彼らは役割自体を変換した文字列であるので、バイトストリームオブジェクトが来る渡すために建設時間が必要。



参考記事:

https://blog.csdn.net/sinat_37064286/article/details/86537354

おすすめ

転載: www.cnblogs.com/tanghaorong/p/12322376.html