誰かが私にInputStream
とOutputStream
が何であるかを説明しますか?
InputStream
とOutputStream
の両方のユースケースについて混乱しています。
あなたの説明に沿って進むためのコードの断片も含めることができれば、それは素晴らしいことです。ありがとうございます。
InputStream
とOutputStream
の目的は、入力と出力のさまざまな方法を抽象化することです。ストリームがファイルであるか、Webページであるか、画面であるかは関係ありません。重要なのは、あなたがストリームから情報を受け取ること(あるいはそのストリームに情報を送ること)です。
InputStream
はあなたが読む多くのことに使われます。
OutputStream
はあなたが書く多くのことに使われます。
これがサンプルコードです。 InputStream instr
とOutputStream osstr
が既に作成されていると仮定します。
int i;
while ((i = instr.read()) != -1) {
osstr.write(i);
}
instr.close();
osstr.close();
InputStreamは読み込みに、OutputStreamは書き込みに使用されます。これらはデコレータとして互いに接続されているため、あらゆる種類のソースからあらゆる種類のデータを読み書きできます。
たとえば、ファイルにプリミティブデータを書き込むことができます。
File file = new File("C:/text.bin");
file.createNewFile();
DataOutputStream stream = new DataOutputStream(new FileOutputStream(file));
stream.writeBoolean(true);
stream.writeInt(1234);
stream.close();
書かれた内容を読むには:
File file = new File("C:/text.bin");
DataInputStream stream = new DataInputStream(new FileInputStream(file));
boolean isTrue = stream.readBoolean();
int value = stream.readInt();
stream.close();
System.out.printlin(isTrue + " " + value);
他の種類のストリームを使用して読み書きを強化することができます。たとえば、効率化のためにバッファを導入できます。
DataInputStream stream = new DataInputStream(
new BufferedInputStream(new FileInputStream(file)));
オブジェクトのような他のデータを書くことができます:
MyClass myObject = new MyClass(); // MyClass have to implement Serializable
ObjectOutputStream stream = new ObjectOutputStream(
new FileOutputStream("C:/text.obj"));
stream.writeObject(myObject);
stream.close();
他の異なる入力ソースから読むことができます。
byte[] test = new byte[] {0, 0, 1, 0, 0, 0, 1, 1, 8, 9};
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(test));
int value0 = stream.readInt();
int value1 = stream.readInt();
byte value2 = stream.readByte();
byte value3 = stream.readByte();
stream.close();
System.out.println(value0 + " " + value1 + " " + value2 + " " + value3);
ほとんどの入力ストリームには、出力ストリームもあります。あなたは特別なものを読み書きするためにあなた自身のストリームを定義することができ、複雑なものを読むための複雑なストリームがあります(例えばZipフォーマットを読み書きするためのストリームがあります)。
Javaチュートリアル から:
ストリームは一連のデータです。
プログラムは入力ストリームを使用して、ソースからデータを一度に1項目ずつ読み取ります。
プログラムは出力ストリームを使用して、宛先にデータを1つずつ書き込みます。
上記のデータソースとデータ送信先は、データを保持、生成、または消費するものなら何でもかまいません。明らかにこれにはディスクファイルが含まれますが、転送元または転送先は他のプログラムでもかまいません、周辺機器、ネットワークソケット、または配列。
Oracleチュートリアルからのサンプル コード :
import Java.io.FileInputStream;
import Java.io.FileOutputStream;
import Java.io.IOException;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
このプログラムはバイトストリームを使ってxanadu.txtファイルをoutagain.txt、に1を書くことでコピーします。一度に1バイト
このSE質問を見て、Byte Streamsの上にあるラッパーである高度なCharacterストリームについての詳細を知ってください。
inputStreamから読み込み、OutputStreamに書き込みます。
たとえば、ファイルをコピーしたいとします。ソースファイルから読み込むFileInputStreamと、新しいファイルに書き込むFileOutputStreamを作成します。
データが文字ストリームの場合は、InputStreamの代わりにFileReaderを、OutputStreamの代わりにFileWriterを使用できます。
InputStream input = ... // many different types
OutputStream output = ... // many different types
byte[] buffer = new byte[1024];
int n = 0;
while ((n = input.read(buffer)) != -1)
output.write(buffer, 0, n);
input.close();
output.close();
OutputStreamは、書き込み出力を表す抽象クラスです。 OutputStreamクラスにはさまざまな種類があり、それらは特定のもの(画面、ファイル、バイト配列、ネットワーク接続など)に書き出されます。 InputStreamクラスは同じものにアクセスしますが、そこからデータを読み込みます。
これが 良い基本的な例 FileOutputStreamとFileInputStreamを使ってファイルにデータを書き込み、それから再び読み込むことです。
流れは、液体、空気、または気体の連続的な流れです。
Javaストリームは、送信元から送信先へのデータの流れです。転送元または転送先は、ディスク、メモリ、ソケット、またはその他のプログラムです。データは、バイト、文字、またはオブジェクトです。同じことがC#またはC++ストリームにも当てはまります。ジャワの流れのためのよい隠喩は蛇口から浴槽へ、そして後で排水へと流れる水です。
データはストリームの静的部分を表します。読み書きメソッドはストリームの動的部分を表します。
InputStream
はソースからのデータの流れを表し、OutputStream
は宛先へのデータの流れを表します。最後に、InputStream
とOutputStream
は、Cファイルポインタなど、データへの低レベルアクセスを抽象化したものです。
ストリーム:素人用語でストリームはデータであり、最も一般的なストリームはデータのバイナリ表現です。
入力ストリーム 注:ファイルまたは他のソースからデータを読み取っている場合、使用されるストリームは入力ストリームです。簡単に言うと、入力ストリームはデータを読み取るためのチャネルとして機能します。
出力ストリーム :ソース(ファイルなど)からデータを読み込んで処理したい場合は、まずデータを保存する必要があります。データを保存する手段は出力ストリームです。
出力ストリームは一般にファイルやネットワークなどのような何らかのデータ送信先に関連しています。Java出力ストリームはデータが最終的に書き込まれて終了する場所です。
import Java.io.printstream;
class PPrint {
static PPrintStream oout = new PPrintStream();
}
class PPrintStream {
void print(String str) {
System.out.println(str)
}
}
class outputstreamDemo {
public static void main(String args[]) {
System.out.println("hello world");
System.out.prinln("this is output stream demo");
}
}
入力ストリーム
オブジェクトはキーワードnewを使用して作成することができ、利用可能なコンストラクタにはいくつかの種類があります
次のコンストラクタはファイル名を文字列として取り、ファイルを読み込むための入力ストリームオブジェクトを作成します。
InputStream f = new FileInputStream("input.txt");
次のコンストラクタは、ファイルを読み込んで入力ストリームオブジェクトを作成するためにファイルオブジェクトを受け取ります。まず、File()メソッドを使って次のようにファイルオブジェクトを作成します。
File f = new File(“input.txt");
InputStream f = new FileInputStream(f);
出力ストリーム
FileOutputStreamは、ファイルを作成してそこにデータを書き込むために使用されます。
出力用に開く前に、ストリームがファイルを作成します(まだ存在しない場合)。
これは、FileOutputStreamオブジェクトを作成するために使用できる2つのコンストラクタです。
次のコンストラクタは、ファイル名を文字列として取り、ファイルを書き込む入力ストリームオブジェクトを作成します。
OutputStream f = new FileOutputStream(“output.txt")
次のコンストラクタはファイルを受け取り、ファイルを書き込むための出力ストリームオブジェクトを作成します。まず、File()メソッドを使って次のようにファイルオブジェクトを作成します。
File f = new File(“output.txt");
OutputStream f = new FileOutputStream(f);