ホームページ > Java > &#&チュートリアル > Java 入力ストリーム 出力ストリーム

Java 入力ストリーム 出力ストリーム

大家讲道理
リリース: 2017-05-28 11:28:07
オリジナル
1594 人が閲覧しました


1. IO とは

Java の I/O 操作は、主に Java を入力および出力操作に使用することを指し、Java のすべての I/O メカニズムは入力および出力のデータ ストリームに基づいています。文字、またはデータの流れる一連のバイト。 Java の I/O ストリームは、データの読み取りと書き込みのための標準メソッドを提供します。データ ソースを表す Java のすべての オブジェクト は、データ ストリーム内のデータを読み書きするためのメソッドを提供します。

Java.io は、ほとんどのデータ フロー指向の入出力クラスの主要なソフトウェア パッケージです。さらに、Java はブロック送信のサポートも提供し、ブロック IO はコア ライブラリ java.nio で使用されます。

ストリームIOの利点はシンプルで使いやすいことですが、欠点は効率が低いことです。ブロック IO は非常に効率的ですが、プログラミングはより複雑です。私は Java IO
モデルです : Java の IO モデルの設計は非常に優れており、Decorator モードを使用して機能に応じてストリームを分割し、必要な機能を取得できます。たとえば、バッファリングされたファイル入力ストリームが必要な場合は、FileInputStream と BufferedInputStream を組み合わせて使用​​する必要があります。


2. データフローの基本概念


データフローは、水道管の一端の水の流れと同じように、連続的なデータの集合です。水道管の向こう側には水が少しずつ供給され、途切れることなく水が流れ続けています。データ書き込みプログラムは、セグメントごとにデータをデータ フロー パイプラインに書き込むことができ、これらのデータ セグメントは順番に長いデータ ストリームを形成します。データ読み取りプログラムの場合、書き込み中のデータ ストリームの分割はわかりませんが、毎回、前のデータのみを読み取ってから、後続のデータを読み取ることができます。データを複数回に分けて書き込んだ場合でも、一度に全体を書き込んだ場合でも、読み取り時の効果はまったく同じです。

「ストリームは、ディスクまたは

その他の周辺デバイスに保存されるデータのソースまたはエンドポイントです。

コンピューターにデータを保存するには 3 つの方法があります。1 つは外部ストレージ、もう 1 つはメモリです。」

キャッシング

。たとえば、コンピュータ上のハードディスク、磁気ディスク、USB フラッシュ ドライブなどはすべて外部記憶装置であり、コンピュータにはメモリ スティックがあり、キャッシュは CPU 内にあります。ストレージ容量が最も大きいのは外部ストレージ、次にメモリ、最後にキャッシュですが、外部ストレージからのデータの読み取りが最も遅く、次にメモリ、キャッシュが最も速くなります。外部メモリからメモリへのデータの読み出し、およびメモリから外部メモリへのデータの書き込みについてまとめました。メモリと外部ストレージを理解するには、単にコンテナとして理解することができます。つまり、外部ストレージはコンテナであり、メモリは別のコンテナです。では、外部ストレージコンテナのデータをメモリコンテナに読み込み、メモリコンテナのデータを外部ストレージに保存するにはどうすればよいでしょうか?

Java

クラス ライブラリでは、関係するフィールドが広範囲に関与しているため、IO 部分の内容は膨大です: 標準入出力、ファイル操作、ネットワーク上のデータ フロー、

文字列

ストリーム ストリーム 、オブジェクトストリーム、zipファイルストリームなど。javaでは、入力と出力の抽象化をストリーム

と呼びます。これは、2つのコンテナを接続する水道管のようなものです。外部メモリからメモリへのデータの読み取りは入力ストリームと呼ばれ、メモリから外部メモリへのデータの書き込みは出力ストリームと呼ばれます。

ストリームは非常に鮮明な概念です。プログラムがデータを読み取る必要がある場合、このデータ ソースはファイル、メモリ、またはネットワーク接続になります。同様に、プログラムがデータを書き込む必要がある場合、宛先へのストリームを開きます。 基本概念の要約は次のとおりです:

1) データ フロー

:

開始点と終了点を持つ順序付けされたバイトのデータ シーケンスのセット。入力ストリームと出力ストリームを含みます。

2) 入力ストリーム (入力ストリーム):

プログラムは入力ストリームからデータ ソースを読み取ります。データ ソースには、データ ソースをプログラムに読み取る通信チャネルである外部 (キーボード、ファイル、ネットワークなど) が含まれます

3) 出力ストリーム :

プログラムはデータを出力ストリームに書き込みます。プログラム内のデータを外部 (モニター、プリンター、ファイル、ネットワークなど) に出力する通信チャネル。

データ フローを使用する目的は、出力と入力をデバイスから独立させることです。

入力ストリームは、データソースがどのデバイスから来たのかを気にしません(キーボード、ファイル、ネットワーク)
出力ストリームは、データがどのデバイスを対象としているのかを気にしません(キーボード、ファイル、ネットワーク)

4 データフロー分類:

フローシーケンス内 データは、未処理の元のバイナリ データ、または特定のエンコード後の特定の形式に準拠した特定のデータのいずれかになります。したがって、Java のストリームは 2 つのタイプに分けられます:
1) バイト ストリーム: データ ストリームの最小データ単位はバイトです
2) 文字ストリーム: データ ストリームの最小データ単位は文字です (Java では)文字は Unicode でエンコードされており、1 文字は 2 バイトを占めます。



3. 標準 I/O

同時に、Java プログラムはコマンドラインパラメータを通じて簡単な情報を交換することもできます。標準入力、キーボードやモニターなどの出力デバイスは、情報を交換するために使用されます。ファイルを通じて、あらゆるデータ形式の情報を外部と交換できます。

1. コマンドラインパラメータ


  1. public class TestArgs {

  2. public static void main(String[] args) {

  3. for .println ("args[" + i + "] is <" + args[i] + ">");

  4. 実行コマンド:Java Java C VB
  5. 実行結果:

  6. args[0] は
  7. args[1] は

  8. args[2] は
  9. 2。データ フロー

Java システムに付属する標準データ フロー: java.System

extends

Object

{

static PrintStream err;

//標準エラー ストリーム (出力)

static InputStream in;

//標準入力 (キーボード入力ストリーム)


  1. static PrintStream out;

    //標準出力ストリーム (モニター出力ストリーム)
  2. }

    注:
    (1) System クラスは オブジェクトを作成できず、その 3 つの static メンバーのみを直接使用できます。
    (2) mainメソッドが実行されるたびに、上記3つのオブジェクトが自動生成されます。

    1) 標準出力ストリーム System.out

    System.out はデータを標準出力デバイスに出力し、そのデータ型は PrintStream です。メソッド:

    Void print(parameter)

    Void println(parameter)

    2) 標準入力ストリーム System.in

    System.in は標準入力デバイスのデータを読み取ります (標準入力からデータを取得します、通常はキーボード)、そのデータ型はInputStreamです。メソッド:

    int read() //ASCII コードを返します。戻り値 = -1 の場合は、バイトが読み取られておらず、読み取り作業が終了したことを意味します。

    int read(byte[] b)// 戻り値は、読み取られたバイト数です。

    public
    class StandardInputOutput {

    ;

    1. publicstaticvoidmain(string args []){

    2. inintb; )) != -
    3. 1) {
    4. System.out.print(( char) b); catch (IO

      Exception
    5. e) {
    6. System.out. .toString());
    7. 出てくるもの:

    8. 3) 標準エラーストリーム
    9. System.err は標準エラー を出力し、そのデータ型は PrintStream です。詳細な手順については、APIを参照してください。

    10. 標準出力は、System.out を介して println メソッドを呼び出してパラメーターを出力し、新しい行でラップしますが、print メソッドはパラメーターを出力しますが、新しい行はラップしません。 println または print メソッドは、
    11. オーバーロード

      を介して基本データ型を出力する複数のメソッドを実装します。これには、boolean、char、int、long、float、double の出力パラメーター型が含まれます。同時に、出力パラメーターの型が char[]、String、Object であるメソッドもオーバーロードされます。このうち、print(Object) メソッドと println(Object) メソッドは、実行時にパラメータ Object の toString メソッドを呼び出します。

    12. import java.io.BufferedReader

    13. import .io.InputStreamReader;
    14. public

      クラス StandardInputOutput {
    15. public

      static
    16. void main(String args[]) {


  3. 文字列;

    InputStreamReader(System.in);
  4. in =

    new BufferedReader(ir);
  5. System.out.println("Unix システム: ctrl-d または ctrl- c 終了

    "
  6. +

    "nWindows システム: ctrl-z 終了");
  7. try {

  8. s = in.readLine();

  9. / / readLine() メソッドの実行中に I/O エラーが発生した場合、IOException がスローされます

  10. System.out.println(

    " Read: " + s); in.readline(); 4.java.IO 階層アーキテクチャ

    Java.io パッケージ全体で最も重要なものは、5 つのクラスと
  11. インターフェース
  12. です。 5 つのクラスは File、OutputStream、InputStream、Writer、および Reader を指します。1 つのインターフェイスは Serializable を指します。これらのコア IO 操作をマスターすると、Java

    Java I/O の IO システムを予備的に理解できるようになります。主に次の 3 つの部分を含むレベルが含まれます:
  13. 1. ストリーミング部分

    – IO の主要部分
  14. 2. 非ストリーミング部分 – 主にストリーミング部分にいくつかの補助クラスが含まれます。 : File クラス、RandomAccessFile クラス、および FileDescriptor 3. その他のクラス -- ファイル読み取り部分の セキュリティ

    に関連するクラス、たとえば、SerializablePermission クラス、およびローカル操作システム関連の
  15. ファイル システム
  16. クラスFileSystem クラス、Win32FileSystem クラス、および WinNTFileSystem クラスとして。

    主なカテゴリは次のとおりです:

    1. ファイル (ファイルの特性と管理): 新しいディレクトリの生成、ファイル名の変更、ファイルの削除、ファイルのパスの決定など、ファイルまたはディレクトリの説明情報に使用されます。 、など。
  17. 2. InputStream (バイナリ形式の操作): 抽象クラス、バイトベースの入力操作は、すべての入力ストリームの親クラスです。すべての入力ストリームが持つ共通の特性を定義します。

    3. OutputStream (バイナリ形式の操作): 抽象クラス。バイトベースの出力操作。すべての出力ストリームの親クラスです。すべての出力ストリームが持つ共通の特性を定義します。

    Java の文字は Unicode 標準を採用しており、1 文字は 16 ビット、つまり 1 文字は 2 バイトで表されます。この目的のために、文字を処理するためのストリームが Java に導入されました。

    4. Reader (ファイル形式操作): 抽象クラス、文字ベースの入力操作。

    5. Writer (ファイル形式操作): 抽象クラス、文字ベースの出力操作。

    6. RandomAccessFile (ランダムファイル操作): 機能が豊富で、ファイル内の任意の場所からアクセス(入出力)操作を実行できます

    Java の IO ストリームのアーキテクチャは次の図に示すとおりです。 -ファイルクラス

    Java 言語の java.io パッケージでは、File クラスがファイルとディレクトリを記述するための操作および管理メソッドを提供します。ただし、File クラスは、データの入出力を担当せず、特にディスク ファイルとディレクトリの管理に使用されるため、InputStream、OutputStream、Reader または Writer のサブクラスではありません。


    機能: File クラスは主に、ファイル、

    クエリファイル属性

    、および

    プロセスファイル
    ディレクトリに名前を付けるために使用されます。


    public File

    {}

    Fileクラスは、ファイルとディレクトリ名を柔軟に受け取ることができる合計3つの異なるコンストラクターを提供しますさまざまなパラメータ形式の情報。コンストラクター: 1) File (文字列パス名)

    例: File f1=new File("FileTest1.txt") // f1 が指すファイルは、現在のディレクトリに作成された FileTest1 です。

    2) ファイル (文字列の親、文字列の子)
    1. 例: File f2=new File("D:\dir1","FileTest2.txt") ;// 注: D:\dir1 ディレクトリ事前に存在する必要があります。そうでない場合は 3) ファイル (ファイルの親、文字列の子) 例: File f4=new File("\dir3");

      File f5=new File(f4,"FileTest5.txt") ; // \dir3 ディレクトリが存在しない場合は、最初に f4.mkdir() を使用して作成します。ディスク ファイルまたはディレクトリに対応する File オブジェクトが作成されたら、そのメソッドを呼び出すことでファイルまたはディレクトリの属性を取得できます。 。
    2. 1) public boolean assigns( ) は、ファイルまたはディレクトリが存在するかどうかを判断します

      2) public boolean isFile( ) は、それがファイルまたはディレクトリであるかどうかを判断します 3) public boolean isDirectory( ) は、ファイルまたはディレクトリであるかどうかを判断しますdirectory 4) public String getName( ) ファイル名またはディレクトリ名を返します 5) public String getPath() はファイルまたはディレクトリのパスを返します。

      6) public long length( ) ファイルの長さを取得します
    3. 7) public String[ ] list ( ) ディレクトリ内のすべてのファイル名を文字列
    4. 配列

      に保存して返します。

    5. File クラスは、ファイルまたはディレクトリを管理および操作するためのいくつかのメソッドも定義します:
    1) public boolean renameTo( File newFile ); 2) public void

    delete
    ( ); 3) public boolean mkdir( ); ディレクトリを作成します

    例:



    1. import java.io.File

    2. import java.io.IOException {

    3. パブリック静的void main(String args[]) throws IOException {

    4. ファイル f1 = 新しいファイル (dir,

      "fileOne.txt");
    5. ファイル f2 = 新しいFile(dir,

      "fileTwo.java");
    6. //ファイル オブジェクトが作成された後、指定されたファイルまたはディレクトリは必ずしも物理的に存在するとは限りません
    7. if (!f1.exists())

    8. f1.createNewFile(); .createNewFile(); System.out.println("f1 の AbsolutePath = " + f1.getAbsolutePath());

    9. System.out.println (

      "f1 Canread=" + f1.canRead());

    10. System.out.println(

      "f1 の len = "+F1.length ());

      String [] fl;
    11. INT
    12. Count
    13. =

      0;

    14. System.out.println(FL[i] +
    15. "は\rootにあります") ;

    16. }

    17. System.out.println(
    18. "//root にファイルがあります" + count +

      ")

    19. }

    20. 説明: File クラスのメソッド:
    21. (1) contains() 指定されたファイルまたはディレクトリがディスクに存在するかどうかをテストします

      (2) mkdir() は指定されたファイル オブジェクトを作成します Directory (単層ディレクトリ) (3) createNewFile() はファイル オブジェクトで指定されたファイルを作成します

      (4) list() はディレクトリ
    22. 6 内のすべてのファイル名文字列を返します。 IO ストリーム クラス ライブラリ1. io ストリームの 4 つの基本クラス

      java.io パッケージには、ストリーミング I/O に必要なすべてのクラスが含まれています。 java.io パッケージには、InputStream、OutputStream、Reader および Writer クラスの 4 つの基本クラスがあり、それぞれバイト ストリームと文字ストリームを処理します:
    23. 基本データ ストリーム I/O

    24. 入力/出力

      バイトストリーム

      キャラクターストリーム

      入力ストリーム

      入力ストリーム

      Reader

      出力ストリーム

      OutputStream

      ライター


      Java の他の多様なストリームはそれらから派生します:

      JDK1.4 バージョン 新しい I/O が導入されました。新しい I/O クラス ライブラリは、チャネルとバッファを使用して I/O 操作の効率を向上させます。

      java.io パッケージでは、java.io.InputStream はバイト入力ストリームを表し、java.io.OutputStream はバイト出力ストリームを表します。これは java.io パッケージの最上位にあります。どちらのクラスも抽象クラスです。つまり、インスタンス化できず、特定の機能を実現するにはサブクラス化する必要があります。

      1. IO ストリームの特定の分類

      1. I/O タイプによる全体的な分類:

      1. メモリ 1) メモリ配列へのデータの読み取りと書き込み: CharArray Reader、CharArrayWriter、ByteArrayInputStream、ByteArrayOutputStream
      2) メモリ文字列へのデータの読み書き StringReader、StringWriter、StringBufferInputStream
      2. パイプパイプライン パイプラインの入出力(プロセス間通信)を実装: PipedReader、PipedWriter、 Piped InputStream、PipedOutputStream
      3.ファイル ファイル ストリーム。ファイルの読み取りと書き込み: FileReader、FileWriter、FileInputStream、FileOutputStream
      4. ObjectSerialization オブジェクトの入力と出力: ObjectInputStream、ObjectOutputStream
      5.DataConversion データ ストリーム 基本データ型に従って読み取りと書き込み (処理されるデータは Java Basic 型) (Boolean、byte、integer、浮動小数点など)): DataInputStream、DataOutputStream
      6.Printing 便利な印刷メソッドが含まれています: PrintWriter、PrintStream
      7.Buffering 読み取りまたは書き込み時 送信時、データはキャッシュされますI/O の数を減らすため: BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream
      8.フィルタリング フィルタ ストリーム、データの読み取りまたは書き込み時のフィルタリング: FilterReader、FilterWriter、FilterInputStream、FilterOutputStream が渡されます
      9.連結マージ入力 複数の入力ストリームを 1 つの入力ストリームに接続します: SequenceInputStream
      10.Counting count データを読み取るときに行をカウントします: LineNumberReader、LineNumberInputStream
      11.Peeking Ahead 渡された事前読み取り用のキャッシュ メカニズム: PushbackReader、PushbackInputStream
      12。バイトと文字の間の変換 特定のエンコード/デコード標準に従ってバイト ストリームを文字ストリームに変換するか、逆変換を実行します (ストリームからリーダー、ライター変換クラス): InputStreamReader、OutputStreamWriter

      2. データ ソース (宛先) による分類: 1. ファイル (ファイル): FileInputStream、FileOutputStream、FileReader、FileWriter
      2. byte[]: ByteArrayInputStream、ByteArrayOutputStream
      3.Char[] : CharArrayReader、CharArrayWriter
      4. StringBufferInputStream、StringReader、StringWriter 5. ネットワークデータストリーム:InputStream、OutputStream、Reader、Writer



      7. バイトストリームInputStream/OutputStream

      1.InputStream

      抽象クラス InputStreamはバイト入力ですそれをストリームします。自体は抽象クラスであり、さまざまな関数を実装するにはそのサブクラスに依存する必要があります。この抽象クラスは、バイト入力ストリームを表すすべてのクラスのスーパークラスです。

      InputStream から継承

      するストリームは、プログラムへのデータの入力に使用され、データ単位はバイト (8 ビット) です。

      InputStream はバイトデータを入力するクラスなので、InputStream クラスには 3 つのオーバーロードされた読み取りメソッドが用意されています。
      (1) public abstract int read(): バイトのデータを読み取って戻ります。値は int です。上位ビットに 0 が埋め込まれた型の値。戻り値 = -1 の場合は、バイトが読み取られておらず、読み取り作業が終了したことを意味します。
      (2) public int read(byte b[ ]): b.length バイトのデータを読み取り、配列 b に入れます。戻り値は読み取られたバイト数です。このメソッドは実際には次のメソッドを呼び出すことで実装されます
      (3) public int read(byte b[ ], int off, int len): 入力ストリームから最大 len バイトのデータを読み取り、off のオフセットに格納します。 b 配列。
      (4) public int available(): 入力ストリームで読み取れるバイト数を返します。注: 入力がブロックされている場合、現在のスレッドは一時停止されます。InputStream オブジェクトがこのメソッドを呼び出した場合、このメソッドは 0 のみを返します。このメソッドは、InputStream クラスを継承するサブクラス オブジェクトによって呼び出される必要があります
      (5. ) public long stop(long n): 入力ストリームの n バイトを無視し、戻り値は実際に無視されたバイト数です。一部のバイトをスキップして読み取ります
      (6) public int close(): 使用した後、次のことを行う必要があります。開いたストリームは閉じられています

      主なサブクラス:

      1) FileInputStream は、ファイルを読み取るために、InputStream としてファイルを使用します 2) ByteArrayInputStream: メモリ内のバッファを InputStream として使用します

      3) StringBufferInputStream: String オブジェクトを次のように使用します。 InputStream

      4) PipedInputStream: 主にスレッドで使用されるパイプの概念を実装します
      5) SequenceInputStream: 複数のInputStreamを1つのInputStreamに結合します


      2. OutputStream

      抽象クラス

      OutputStreamは、InputStreamに対応するデータ出力用の書き込みメソッドを3つ提供します。 1. public void write(byte b[ ]): パラメータ b のバイトを出力ストリームに書き込みます。

      2. public void write(byte b[ ], int off, int len): オフセット off から始まるパラメーター b の len バイトを出力ストリームに書き込みます。

      3. public abstract void write(int b): まず int を byte 型に変換し、下位バイトを出力ストリームに書き込みます。
      4. public void
      flush
      ( ): データバッファー内のデータをすべて出力し、バッファーをクリアします。
      5. public void close(): 出力ストリームを閉じ、ストリームに関連するシステムリソースを解放します。 主なサブクラス:

      1) ByteArrayOutputStream: メモリ内のバッファーに情報を保存します 2) FileOutputStream: ファイルに情報を保存します

      3) PipedOutputStream: Pipe の概念を実装し、スレッドで使用される main

      4) SequenceOutputStream : 複数の OutStream を 1 つの OutStream にマージします

      ストリームの終了の判定: read() メソッドの戻り値が -1 の場合、readLine() の戻り値が null の場合。

      3. ファイル入力ストリーム: FileInputStream クラス

      FileInputStream は、read() メソッドを使用して一度に 1 バイトを読み取り、それを int 型として返すか、read() メソッドを使用してバイト配列に読み取ることができます。 array 要素の数に応じて読み取られるバイト数。ファイル全体の読み取りまたは書き込みのプロセスでは、このようなバイト配列は通常、データを受信する際の中間的な役割を果たすため、バッファーとして使用されます。

      機能: ファイルをデータ入力ソースとして使用するデータフロー。つまり、ファイルを開き、ファイルからメモリにデータを読み取るクラスです。

      利用方法(1)

      ファイル fin=new File("d:/abc.txt");

      FileInputStream in=new FileInputStream( fin);


      利用方法(2)

      FileInputStream in=new FileInputStream(" d: /abc.txt");

      プログラム例:
      InputFromFile.javaプログラムの内容をモニターに表示



        import java.io.IOException;
      1. import java.io.FileInputStream;  

      2. ;  

      3. public class TestFile {

      4. public static void main(String args[]) throws IOException {

      5. 試してみる{

      6. FileInputStream rf=new FileInputStream("InputFromFile.java");  

      7. int n=512;   バイト バッファ[]=新しい バイト[n];     

      8. while((rf.read(buffer,0,n)!=-1)&&(n>0)){

      9. System.out .println(new 文字列(バッファ) );  

      10. }

      11. System.out.println();  

      12. rf.close();  

      13. } catch(IOException IOe){

      14. System.out.println(IOe.toString());  

      15. }


      16. }


      17. }


      4.文件出流:FileOutputStream类

      作用:用来データ出力対象のデータストリームとしてファイルとして処理されます。または、内部保存領域からのデータ入力ファイル

      FileOutputStream を使用して、データ出力対象のデータストリームとしてファイルとして処理されます。ファイル名を示す文字列、または File であってもよいまたは FileDescriptor オブジェクト。 2:
      FileOutputStream out=new FileOutputStream(“d:/myjava/write.txt”); 
      方式 3: 構造関数は FileDescriptor() オブジェクトをパラメータとして使用します。
      FileDescriptor() fd=new FileDescriptor(); 
      FileOutputStream f2=new FileOutputStream(fd); 
      方式 4: 構造関数は、文件名作を最初のパラメータとし、アプリケーションを 2 番目のパラメータとして扱います。 
      注意: (1)ファイル内にデータを書き込むとき、ファイルが存在する場合、存在するファイルを覆います;(2)の会話/書き込み操作が終了するとき、クローズメソッドを使用して一時的に流れます。 :使用键盘输入一段文章、文章保存文件write.txt中






      import java.io.IOException;  


      import java.io.FileOutputStream;  


      1. public class TestFile {

      2. public

        static
      3. void main(String args[])
      4. throws IOException {

      5. try {

      6. System.out.println("キーボードから入力してください");  

      7. int カウント、n = 512;  

      8. byte buffer[] = new byte[n];  

      9. count = System.in.read(buffer);  

      10. FileOutputStream wf = new FileOutputStream("d:/myjava/write.txt");  

      11. wf.write(buffer, 0, count);  

      12. wf.close(); // 現在のストリーム書き込み操作が終了したら、close メソッドを使用してストリームを停止します。  

      13. } catch (IOException IOe) {

      14. System.out.println("ファイル書き込みエラー!");  

      15. }

      16. }
      17. }


      18. 5. FileInputStream と FileOutputStream のアプリケーション
      利用プログラムは、ファイル file1.txt を file2.txt にコピーします。  


      import java.io.IOException;  


        import java.io.FileOutputStream;  
      1. import java.io.FileInputStream;  
      2. public
      3. class TestFile {
      4. public

        static
        void main(String args[])

        throws IOException {
      5. try {
      6. File inFile = new File("copy.java");  

      7. File outFile = new File(

        "copy2.java");  
      8. FileInputStream finS = new FileInputStream(inFile);  

      9. FileOutputStream foutS =

        new FileOutputStream(outFile);  

      10. int c;  
      11. while ((c = finS.read()) != -
      12. 1) {

      13. foutS.write(c);  
      14. }

      15. finS.close();  

      16. foutS.close();

      17. }

      18. }

      19. 6. クッション入出力ストリームbufferedInputStream/BufferedPutstream



      コンピューターアクセス 外部デバイスアクセス 非常に時間がかかります。外部メモリへのアクセス頻度が高くなると、CPU がアイドル状態になる可能性が高くなります。外部メモリへのアクセス回数を減らすには、ペリフェラルへの 1 回のアクセスでより多くのデータを読み書きする必要があります。この目的を達成するには、プログラムとフロー ノード間のデータ交換に必要な読み取りおよび書き込みメカニズムに加えて、バッファリング メカニズムも追加する必要があります。バッファリングされたストリームとは、各データ ストリームにバッファが割り当てられることを意味し、バッファはデータを一時的に保存するメモリです。これにより、ハードディスクへのアクセス回数が削減され、伝送効率が向上します。

      BufferedInputStream: バッファリングされたストリームにデータを書き込むとき、データは最初にバッファーに書き込まれ、バッファーがいっぱいになると、システムはデータを一度に出力デバイスに送信します。

      BufferedOutputStream: バッファリングされたストリームからデータを読み取るとき、システムは最初にバッファーからデータを読み取り、バッファーが空になると、次に入力デバイスからバッファーにデータを読み取ります。

      1) ファイルをメモリに読み込みます:


      BufferedInputStream を FileInputStream に接続します

      FileInputStream in=new FileInputStream( "file1.txt " );

      BufferedInputStream bin=new BufferedInputStream (in);

      2) メモリをファイルに書き込みます:

      BufferedOutputStream を FileOutputStream に接続します

      FileOutputStreamout=new FileOutputStream(“file1.txt”);

      BufferedOutputStream bin=new BufferedInputStream(out);

      3) キーボード入力ストリームはメモリに読み込みます

      BufferedReader を標準データ ストリームに接続します

      InputStreamReader sin=new InputStreamReader (System.in);

      import java.io.*;

      public

      class ReadWriteToFile {

      ing args[])
      throws IOException {

      Re InputStreamReader Sin =

      New InputStreamReamReader (System.in);

      BufferedReader ビン =
      新しい BufferedReader (SIN);

      1. ファイルライター出力 = 新しいファイルライター .txt ")) ;

        while ((s = bin.readLine()).length() >
      2. 0) {T bout.write (s,
      3. 0, s.Length ())


      4. }}}}

        プログラムの説明:
        キーボードから文字を読み取り、ファイルに書き込みます。 BufferedReader クラスのメソッド: String readLine()
        機能: 復帰文字で終わる文字列の行を読み取ります。
        BufferedWriter クラスのメソッド: bout.write(String s,offset,len)
        機能: バッファからのオフセットから文字列 s を開始し、len 長の文字列をどこかに書き込みます。



        8. 文字ストリーム Writer/Reader

        Java の文字は Unicode 標準を採用しており、1 文字は 16 ビットです。急行。この目的のために、文字を処理するためのストリームが Java に導入されました。

        1. リーダー抽象クラス

        文字ストリームを読み取るための抽象クラス。サブクラスが実装する必要があるメソッドは、read(char[], int, int) と close() だけです。ただし、ほとんどのサブクラスは、効率の向上や追加の機能を提供するために、ここで定義されたメソッドの一部をオーバーライドします。 F)

        1) Filereader:

        と FileInputStream は、主に文字ファイルの読み取りに使用される に対応し、デフォルトの文字エンコーディングを使用します。コンストラクターは 3 つあります:

        (1) 文字列としてのファイル名: Filereader f = new FileReader(“c:/ temp.txt”);

        (2) コンストラクターは、File オブジェクトをパラメーターとして受け取ります。 File f=new file(“c:/temp.txt”); =new FileDescriptor() FileReader f2=new FileReader(fd);
        read を使用して文字列を取得するには、コンストラクターは次のとおりです。 public StringReader( String s);

        2) CharArrayReader:
        ByteArrayInputStream に対応

        3) StringReader:
        StringBufferInputStream に対応

        4) InputStreamReader 入力ストリームからバイトを読み取り、文字に変換します: Public inputstreamReader(in)プットストリームは);

        5) FilterReader:
        文字ストリームのフィルタリングを許可します protected filterReader(Reader r);
        6) BufferReader: Reader オブジェクトをパラメータとして受け入れ、それを追加します 文字バッファ、readline() メソッドを使用して行を読み取ります。 Public BufferReader(Reader r);
        Mainメソッド:

        (1) public int read() throws IOException //文字を読み取り、戻り値は読み取った文字です
        (2) public int read( char cbuf[]) throws IOException; /*一連の文字を配列 cbuf[] に読み込み、戻り値は実際に読み取られた文字数*/
        (3) public abstract int read(char cbuf[],int) off, int len) throws IOException; /* len 文字を読み取り、配列 cbuf[] の添字から開始して格納します。戻り値は、読み取られた実際の文字数です*/。 2. Writer 抽象クラス

        文字ストリームを記述するための抽象クラス。サブクラスが実装する必要があるメソッドは、write(char[], int, int)、flush()、および close() だけです。ただし、ほとんどのサブクラスは、効率の向上や追加の機能を提供するために、ここで定義されたメソッドの一部をオーバーライドします。 そのサブカテゴリは次のとおりです:

        1) FileWrite: FileOutputStream に対応します。
        デフォルトの文字エンコーディングとバッファ サイズを使用して、文字タイプデータをファイルに書き込みます。
        Public FileWrite(file f);
        2) chararrayWrite: ByteArrayOutputStream に対応し、文字バッファを出力として使用します。
        Public CharArrayWrite();
        3) PrintWrite: フォーマットされた出力を生成します public PrintWriter(outputstream os);
        4) filterWriter: フィルター文字ストリームを書き込むために使用されます
        protected FilterWriter(Writer w); 5) PipedWriter: に対応します。 PipedOutputStream

        6) StringWriter: 対応するバイト指向ストリームがありません

        Mainメソッド:

        (1) public void write(int c) throws IOException //整数値c 16-bit writeの下位値を変更します。出力ストリーム

        (2) public void write(char cbuf[]) throws IOException; //文字配列 cbuf[] を出力ストリームに書き込みます

        (3) public abstract void write(char cbuf[],int off / /文字列 str の文字を出力ストリームに書き込みます
        (5) public void write(String str,int off,int len) throws IOException; //文字列 str のインデックスから len 文字を書き込みます
        (6) lush( ) //出力ストリームをフラッシュし、キャッシュされたすべてのバイトを出力します。 S (7) Close () Close Public Abstract Void Close () Throws IOEXCEPTION



        3. OutputStream と Writer の差分と OutputStream は、微分ストリームと Writer の最小単位で処理されます。データ ストリームはバイト (8 ビット) です

        Reader と Writer は文字ストリームを処理するときに、文字エンコード変換の問題が関係します


        import java.io .*;

        public

        class EncodeTest {

        1. {

        2. ByteArrayInputStream in =

          new ByteArrayInputStream(buff)
        3. ;
        4. " " ) ; System.out.println(); in.close(); }

        5. O例外 {

        6. System.out.println("メモリ内の Unicode 文字エンコーディング: " ); c=

          'good'
        7. lowBit=c&

          0xFF;
        8. int highBit=(c&
        9. 0xFF00)>>

          8;

        10. System.out.println(""+lowBit+" "+highBit);

          String s =
        11. "Good";
        12. System.out.println (
        13. "ローカル オペレーティング システムのデフォルトの文字コーディング:);
        14. ReadBuff (s.getBytes ());
        15. システム。 out.println(
        16. "GBK 文字エンコーディングを使用: ");
        17. readBuff(s.getBytes(
        18. "GBK"));
        19. System.out.printl n(
        20. "を採用)文字エンコーディング: ");
        21. readBuff(s.getBytes(
        22. "UTF-8")); }
        23. }


        Readerクラスは他のクラスの入力文字を変換できますストリーム内のエンコード タイプは Unicode 文字に変換され、メモリ内にメモリが割り当てられます。Writer クラスは、メモリ内の Unicode 文字を他のエンコード タイプの文字に変換して、出力ストリームに書き込むことができます。





        9. IOException 例外クラス

        のサブクラス

        1: このタイプは、ファイルの終わりまたは入力ストリームの終わりが発生したときにスローされます。異常に異常に達した。

        2.public class FileNotFoundException:
        ファイルが見つからない場合にスローされる例外。

        3.public class InterruptedIOException:

        このタイプの例外は、I/O 操作が中断されたときにスローされます。

以上がJava 入力ストリーム 出力ストリームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート