Answers:
的目标InputStream
和OutputStream
是抽象不同的方式来输入和输出:流是一个文件,网页,或者屏幕不应该的事。重要的是您从流中接收信息(或将信息发送到该流中。)
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教程:
流是数据序列。
程序使用输入流从源中一次读取一项数据:
程序使用输出流将数据写入目的地,一次写入一项:
上图所示的数据源和数据目标可以是保存,生成或使用数据的任何数据。显然,这包括磁盘文件,但是源或目标也可以是另一个程序,外围设备,网络套接字或阵列。
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。
看看这个SE问题,以了解有关高级字符流的更多详细信息,这些字符流是字节流的包装器:
您从InputStream读取并写入OutputStream。
例如,说您要复制文件。您将创建一个FileInputStream来读取源文件,并创建一个FileOutputStream来写入新文件。
如果您的数据是字符流,则可以根据需要使用FileReader而不是InputStream和FileWriter而不是OutputStream。
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();
close
总是flush
es,所以不。
OutputStream是一个抽象类,代表编写输出。有许多不同的OutputStream类,它们可以写某些内容(例如屏幕,文件,字节数组或网络连接等)。InputStream类访问相同的内容,但是它们从中读取数据。
流:用外行术语来说,流是数据,大多数通用流是数据的二进制表示。
输入流:如果要从文件或任何其他源读取数据,则使用的流是输入流。用更简单的术语来说,输入流充当读取数据的通道。
输出流:如果要从源(文件等)读取和处理数据,则首先需要保存数据,存储数据的意思是输出流。
输出流通常与某些数据目标有关,例如文件或网络等。在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");
}
}