首页 文章

什么是InputStream和输出流?我们为何以及何时使用它们?

提问于
浏览
244

有人向我解释 InputStreamOutputStream 是什么?

我对 InputStreamOutputStream 的用例感到困惑 .

如果您还可以包含一段代码以与您的解释一起使用,那就太棒了 . 谢谢!

8 回答

  • 9

    InputStreamOutputStream 的目标是抽象输入和输出的不同方式:流是文件,网页还是屏幕无关紧要 . 重要的是您从流中接收信息(或将信息发送到该流中) .

    InputStream 用于您阅读的许多内容 .

    OutputStream 用于您编写的许多内容 .

    这是一些示例代码 . 它假设已经创建了 InputStream instrOutputStream osstr

    int i;
    
    while ((i = instr.read()) != -1) {
        osstr.write(i);
    }
    
    instr.close();
    osstr.close();
    
  • 5

    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格式的Streams) .

  • 2

    来自Java Tutorial

    流是一系列数据 .

    A program uses an input stream to read data from a source, one item at a time:

    enter image description here

    A program uses an output stream to write data to a destination, one item at time:

    enter image description here

    上图所示的数据源和数据目标可以是保存,生成或使用数据的任何内容 . 显然这包括磁盘文件,但源或目标也可以是另一个程序,外围设备,网络套接字或阵列 .

    来自oracle教程的示例code

    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问题,了解有关高级字符流的更多详细信息,这些字符流是Byte Streams之上的包装器:

    byte stream and character stream

  • 27

    您从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();
    
  • 190

    OutputStream是一个表示写入输出的抽象类 . 有许多不同的OutputStream类,它们会写出某些内容(如屏幕,文件,字节数组或网络连接等) . InputStream类访问相同的东西,但他们从中读取数据 .

    这是a good basic example使用FileOutputStream和FileInputStream将数据写入文件,然后将其读回 .

  • 83

    流是连续的液体,空气或气体流 .

    Java流是来自源或目标的数据流 . 源或目标可以是磁盘,内存,套接字或其他程序 . 数据可以是字节,字符或对象 . 这同样适用于C#或C流 . Java流的一个很好的比喻是水从水龙头流入浴缸,然后流入排水系统 .

    数据代表流的静态部分;读取和写入方法是流的动态部分 .

    InputStream 表示来自源的数据流, OutputStream 表示进入目标的数据流 . 最后, InputStreamOutputStream 是对数据的低级访问的抽象,例如C文件指针 .

  • 0

    Stream :在非专业术语中,流是数据,大多数通用流是数据的二进制表示 .

    Input Stream :如果要从文件或任何其他来源读取数据,则使用的流是输入流 . 简而言之,输入流充当读取数据的通道 .

    Output Stream :如果要从源(文件等)读取和处理数据,首先需要保存数据,存储数据的平均值是输出流 .

  • 1

    输出流通常与某些数据目的地(如文件或网络等)相关 . 在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");
        }
    }
    

相关问题