Java如何判断输入流是否写完

在Java中,要判断输入流是否写完,需要根据具体的输入流类型和读取方式进行判断。常见的输入流类型有文件流、网络流等,下面将分别讨论这两种情况。

文件流的判断

对于文件流,我们需要判断输入流是否写完,可以通过以下几种方式实现。

1. 利用BufferedReaderreadLine方法判断

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReadExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                // 处理每行数据
            }
            // 判断输入流是否写完
            if (reader.read() == -1) {
                System.out.println("输入流写完了");
            } else {
                System.out.println("输入流未写完");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们通过BufferedReaderreadLine方法逐行读取文件内容,并在读取到null时判断输入流是否写完。如果reader.read()返回值为-1,则表示输入流已经写完。

2. 利用InputStreamread方法判断

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

public class FileInputStreamExample {
    public static void main(String[] args) {
        try (InputStream is = new FileInputStream("input.txt")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = is.read(buffer)) != -1) {
                // 处理读取到的数据
            }
            // 判断输入流是否写完
            if (is.read() == -1) {
                System.out.println("输入流写完了");
            } else {
                System.out.println("输入流未写完");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们通过输入流的read方法读取文件内容,并在读取到-1时判断输入流是否写完。

网络流的判断

对于网络流,我们通常使用Socket来进行读取操作。下面是判断网络流是否写完的示例代码。

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class NetworkStreamExample {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8080);
             InputStream is = socket.getInputStream()) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = is.read(buffer)) != -1) {
                // 处理读取到的数据
            }
            // 判断输入流是否写完
            if (is.read() == -1) {
                System.out.println("输入流写完了");
            } else {
                System.out.println("输入流未写完");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们通过SocketgetInputStream方法获取输入流,并在读取到-1时判断输入流是否写完。

总结

以上是Java中判断输入流是否写完的两种常见方式,分别适用于文件流和网络流的情况。在实际应用中,我们可以根据具体的需求选择合适的方式来判断输入流是否写完。

gantt
    title Java判断输入流是否写完

    section 文件流
    读取文件内容 :a1, 0, 10
    判断输入流是否写完 :a2, 10, 2

    section 网络流
    读取网络数据 :a3, 0, 10
    判断输入流是否写完 :a4, 10, 2

    section 总结
    选择合适的方式 :a5, 0, 2
stateDiagram
    [*] --> 读取文件内容
    读取文件内容 --> 判断输入流是否写完 : 输入流未写完
    判断输入流是否写完 --> 输入流未写完 : 继续读取
    判断输入流是否写完 --> 输入流写完了 : 输入流写完
    输入流未写完 --> 读取文件内容
    输入流写完了 --> [*]

    [*] --> 读取网络数据