JAva IOのバイトストリームと文字ストリーム-OutputSteamとInputStream
4093 ワード
JAvaのIOストリームはバイトストリームと文字ストリームに分けられる.各ストリームはまた、入力ストリームと出力ストリームに分けられます.まず、入力ストリームと出力ストリームについて説明します.入出力はプログラムメモリに対して、入力はメモリにデータを書き込むことです.出力はプログラムメモリからデータを書き出します.
バイトストリーム直接ファイルデータ.
文字ストリームはバイトでキャッシュに書き込まれ、キャッシュ領域でデータが操作されます.
バイトストリームの親はInputStream(入力ストリーム)とOutputStream(出力ストリーム)です.
IntputStreamの直接サブクラスはAudioInputStream,ByteArrayInputStream,FileInputStream,FilterInputStream,InputStream,ObjectInputStream,PipedInputStream,
SequenceInputStream, StringBufferInputStream
OutputSteamの直接サブクラスは,ByteArrayOutputStream,FileOutputStream,FilterOutputStream,FilterOutputStream,ObjectOutputStream,OutputStream,PipedOutputStreamである.
文字ストリームの親はReader(入力ストリーム)とWriter(出力ストリーム)です.
Readerの直接サブクラスはBufferedReader,CharArrayReader,FilterReader,InputStreamReader,PipedReader,StringReaderである
Writerの直接サブクラスはBufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriterである.
バイトフローと文字フローについて詳しく説明します.
一、バイトストリーム
1バイト出力ストリーム:Output Stream
OutputStreamはIOパケット内のバイト出力ストリームの最大の親であり、抽象クラスであり、Closeable、Flushableインタフェースを実現し、そのサブクラスを通じてオブジェクトをインスタンス化しなければならない.
主に一つの方法があります.
void close()セカンダリ出力ストリームを閉じ、関連するすべてのシステムリソースを解放
void flush()この出力ストリームをリフレッシュし、すべてのバッファの出力バイトを強制的に書き出す
void write(byte[]b)指定したbyte配列からb.lengthバイトをストリームに書き込む
void write(byte[]b,int off,int len)指定したbyte配列のオフセットoffから始まるlenバイトを出力ストリームに書き込む
void write(int b)指定したバイトをこの出力ストリームに書き込む
データをdディスクtestに書き込む.txt中
2バイト入力ストリーム:InputStream
InputStreamは、IOパケット内のバイト入力ストリームの最大の親であり、抽象クラスであり、Closeable、Flushableインタフェースを実現し、そのサブクラスを介してオブジェクトをインスタンス化する必要があります.
主に一つの方法があります.
void close()セカンダリ入力ストリームを閉じ、関連するすべてのシステムリソースを解放
int read(byte[]b)は、入力ストリームから一定数のバイトを読み出し、バッファ配列
void read(byte[]b,int off,int len)は、入力ストリーム内の最大
int read()入力ストリームからデータの次のバイトを読み出す.
実行結果は次のとおりです.
test内容は:hello andy!
二、メモリ操作フロー
メモリの読み書きストリームByteArrayInputStreamとByteArrayOutputStream.
ByteArrayInputStreamは主にメモリへの書き込みを完了し、ByteArrayOutputStreamの機能は主にメモリからのデータ出力である
書き込みメモリ:データ------------------>ByteArrayInputStream--------------->メモリ
メモリ出力:データ<-----------------------ByteArrayOutputStream<--------------------------------------メモリ
バイトストリーム直接ファイルデータ.
文字ストリームはバイトでキャッシュに書き込まれ、キャッシュ領域でデータが操作されます.
バイトストリームの親はInputStream(入力ストリーム)とOutputStream(出力ストリーム)です.
IntputStreamの直接サブクラスはAudioInputStream,ByteArrayInputStream,FileInputStream,FilterInputStream,InputStream,ObjectInputStream,PipedInputStream,
SequenceInputStream, StringBufferInputStream
OutputSteamの直接サブクラスは,ByteArrayOutputStream,FileOutputStream,FilterOutputStream,FilterOutputStream,ObjectOutputStream,OutputStream,PipedOutputStreamである.
文字ストリームの親はReader(入力ストリーム)とWriter(出力ストリーム)です.
Readerの直接サブクラスはBufferedReader,CharArrayReader,FilterReader,InputStreamReader,PipedReader,StringReaderである
Writerの直接サブクラスはBufferedWriter,CharArrayWriter,FilterWriter,OutputStreamWriter,PipedWriter,PrintWriter,StringWriterである.
バイトフローと文字フローについて詳しく説明します.
一、バイトストリーム
1バイト出力ストリーム:Output Stream
OutputStreamはIOパケット内のバイト出力ストリームの最大の親であり、抽象クラスであり、Closeable、Flushableインタフェースを実現し、そのサブクラスを通じてオブジェクトをインスタンス化しなければならない.
主に一つの方法があります.
void close()セカンダリ出力ストリームを閉じ、関連するすべてのシステムリソースを解放
void flush()この出力ストリームをリフレッシュし、すべてのバッファの出力バイトを強制的に書き出す
void write(byte[]b)指定したbyte配列からb.lengthバイトをストリームに書き込む
void write(byte[]b,int off,int len)指定したbyte配列のオフセットoffから始まるlenバイトを出力ストリームに書き込む
void write(int b)指定したバイトをこの出力ストリームに書き込む
データをdディスクtestに書き込む.txt中
package andy.io.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* @author Zhang,Tianyou
* @version 2014 11 18 11:44:06
*/
public class OutputStreamTest {
public static void main(String[] args) throws IOException {
//
File file = new File("d:" + File.separator + "test.txt");
OutputStream outputStream = null;
//
outputStream = new FileOutputStream(file, true);//
String str = "hello andy !";
byte b[] = str.getBytes();
//1
//outputStream.write(b);
//2
for (int i = 0; i < b.length; i++) {
outputStream.write(b[i]);
}
//3
//outputStream.write(b, 0, b.length);
//
outputStream.close();
}
}
2バイト入力ストリーム:InputStream
InputStreamは、IOパケット内のバイト入力ストリームの最大の親であり、抽象クラスであり、Closeable、Flushableインタフェースを実現し、そのサブクラスを介してオブジェクトをインスタンス化する必要があります.
主に一つの方法があります.
void close()セカンダリ入力ストリームを閉じ、関連するすべてのシステムリソースを解放
int read(byte[]b)は、入力ストリームから一定数のバイトを読み出し、バッファ配列
b
に格納する.void read(byte[]b,int off,int len)は、入力ストリーム内の最大
len
個のデータバイトをbyte配列に読み込む.int read()入力ストリームからデータの次のバイトを読み出す.
package andy.io.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* @author Zhang,Tianyou
* version:2014-11-19 11:40:24
*
*
*/
public class InputStreamTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// d test.txt
File file = new File("d:" +File.separator + "test.txt");
// FileInputStream
InputStream inputStream = null;
inputStream = new FileInputStream(file);
//
byte[] b = new byte[(int) file.length()];
//
//int len = inputStream.read(b);
//
/*for (int i=0; i<b.length; i++) {
b[i] = (byte) inputStream.read();
}*/
//
inputStream.read(b, 0, b.length);
//
inputStream.close();
System.out.println("test : " + new String(b));
}
}
実行結果は次のとおりです.
test内容は:hello andy!
二、メモリ操作フロー
メモリの読み書きストリームByteArrayInputStreamとByteArrayOutputStream.
ByteArrayInputStreamは主にメモリへの書き込みを完了し、ByteArrayOutputStreamの機能は主にメモリからのデータ出力である
書き込みメモリ:データ------------------>ByteArrayInputStream--------------->メモリ
メモリ出力:データ<-----------------------ByteArrayOutputStream<--------------------------------------メモリ