java - 如何使用 InputStream 或 DataInputStream 读取带有 System.in 的字符串
问题描述
我正在尝试使用 InputStream o DataInputStream 读取带有 System.in 的字符串,也许我可以使用 BufferedInputStream,但我不知道如何使用它,我正在寻找但我不明白它是如何工作的,我我正在尝试做这样的事情。
import java.io.*;
public class Exer10 {
public static void main(String[] args) throws IOException {
InputStream is = System.in;
DataInputStream dis = new DataInputStream(is);
try {
while (true){
dis.readChar();
}
} catch (EOFException e){
}
}
}
这里的问题是我在 System.in 中循环,因为方法“readChar”在循环中,但是如果我将“dis.readChar()”放在另一个位置,这只会返回一个字节,你能帮上忙吗请问我?
我找到的解决方案是我可以将它放在一个字节数组中,但这并不能解决任何问题,因为如果我这样做,文件必须始终具有相同的长度,并且这个长度不能移动。像这样的东西:
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Exer10 {
public static void main(String[] args) throws IOException {
InputStream is = System.in;
DataInputStream dis = new DataInputStream(is);
byte[] bytes = new byte[10];
dis.read(bytes);
}
}
解决方案
如果有一个字节,readChar 将只返回一个字节。您可以解决的方法如下:
- 检查流中是否有一些数据可用(可用应返回非空字节数)
- 用现有内容填充一个新的字节数组(后来转换为字符串):用 read(byte[] bytes)
然后你可以使用提取的数据:)
public static void main(String[] args) {
InputStream is = System.in;
DataInputStream dis = new DataInputStream(is);
try {
while (true) {
int count = dis.available();
if (count > 0) {
// Create byte array
byte[] bytes = new byte[count];
// Read data into byte array
int bytesCount = dis.read(bytes);
System.out.println("Result: "+ new String(bytes));
}
}
} catch (IOException e) {
System.out.println(e);
}
}
来源:
javadoc:https ://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/DataInputStream.html 示例:https ://www.geeksforgeeks.org/datainputstream-read -method-in-java-with-examples/#:~:text=read(byte%5B%5D%20b)%20method,data%20is%20available%20to%20read。
使用 Scanner 确实更容易实现:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
System.out.println("input: "+sc.nextLine());
}
}
推荐阅读
- ios - 当superview也获得角半径时,子视图的SwiftUI角半径会发生变化
- php - php imagecopyresampled 没有改变图像,但没有错误?
- jenkins - 构建上游后重建失败的下游项目
- ruby-on-rails - 如何在 Rails/Ruby 中获取包含哈希的完整 URL
- ruby-on-rails - 如何在现有的 LAMP 服务器上部署 Ruby 应用程序,而不会弄乱 Apache
- r - 尝试从包含每个文件夹的单独列的文件列表(在嵌套目录中)创建数据框
- java - 将多个 RTP 流转换为 gRPC 流
- python - 如何使用仅使用一个参数的递归函数“计数”?
- r - R - 多列的有序因子
- php - 如何从 PHP 中的两个数组中获取差异