Java如何判断输入流是否写完
在Java中,要判断输入流是否写完,需要根据具体的输入流类型和读取方式进行判断。常见的输入流类型有文件流、网络流等,下面将分别讨论这两种情况。
文件流的判断
对于文件流,我们需要判断输入流是否写完,可以通过以下几种方式实现。
1. 利用BufferedReader
的readLine
方法判断
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();
}
}
}
上述代码中,我们通过BufferedReader
的readLine
方法逐行读取文件内容,并在读取到null
时判断输入流是否写完。如果reader.read()
返回值为-1
,则表示输入流已经写完。
2. 利用InputStream
的read
方法判断
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();
}
}
}
上述代码中,我们通过Socket
的getInputStream
方法获取输入流,并在读取到-1
时判断输入流是否写完。
总结
以上是Java中判断输入流是否写完的两种常见方式,分别适用于文件流和网络流的情况。在实际应用中,我们可以根据具体的需求选择合适的方式来判断输入流是否写完。
gantt
title Java判断输入流是否写完
section 文件流
读取文件内容 :a1, 0, 10
判断输入流是否写完 :a2, 10, 2
section 网络流
读取网络数据 :a3, 0, 10
判断输入流是否写完 :a4, 10, 2
section 总结
选择合适的方式 :a5, 0, 2
stateDiagram
[*] --> 读取文件内容
读取文件内容 --> 判断输入流是否写完 : 输入流未写完
判断输入流是否写完 --> 输入流未写完 : 继续读取
判断输入流是否写完 --> 输入流写完了 : 输入流写完
输入流未写完 --> 读取文件内容
输入流写完了 --> [*]
[*] --> 读取网络数据