返回

输入/输出流:Java中的数据传输管道

闲谈

在Java中,输入/输出(IO)流充当了各种数据源和目标之间的通信管道。它们提供了高效便捷的方式,使开发者能够在应用程序内传输信息。

IO流的分类

Java中的IO流可分为两大类:

  • 输入流: 从数据源(例如文件、网络或标准输入)读取数据。
  • 输出流: 将数据写入目标(例如文件、网络或标准输出)。

输入流

输入字节流(InputStream)

InputStream是所有输入流的基类。它提供基本的方法来从各种数据源读取字节数据。InputStream的常见子类有:

  • FileInputStream:从文件中读取字节。
  • ByteArrayInputStream:从字节数组中读取字节。
  • PipedInputStream:通过管道从另一个线程接收字节。

处理流

处理流包装原始输入流,并提供附加功能,例如:

  • 缓冲流(BufferedInputStream): 通过缓冲数据来提高读性能。
  • 转换流(InputStreamReader): 将字节流转换为字符流。

数据流(DataInputStream)

DataInputStream是用于读取基本数据类型的处理流,例如int、double和String。它简化了从原始字节流中读取复杂数据结构。

标准流

Java提供了三个预定义的标准流:

  • 标准输入(System.in): 代表键盘输入。
  • 标准输出(System.out): 表示控制台输出。
  • 标准错误输出(System.err): 表示错误信息输出。

技术指南:

从文件中读取数据:

import java.io.FileInputStream;
import java.io.InputStream;

public class FileReader {

    public static void main(String[] args) throws Exception {
        InputStream in = new FileInputStream("myfile.txt");

        byte[] buffer = new byte[1024];
        int bytesRead = in.read(buffer);

        while (bytesRead != -1) {
            String data = new String(buffer, 0, bytesRead);
            System.out.println(data);

            bytesRead = in.read(buffer);
        }

        in.close();
    }
}

从控制台读取数据:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ConsoleReader {

    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String input = reader.readLine();
        System.out.println("You entered: " + input);

        reader.close();
    }
}

将数据写入文件:

import java.io.FileOutputStream;
import java.io.OutputStream;

public class FileWriter {

    public static void main(String[] args) throws Exception {
        OutputStream out = new FileOutputStream("myfile.txt");

        String data = "This is a test";
        byte[] buffer = data.getBytes();

        out.write(buffer);

        out.close();
    }
}