我正试图用System.in读取一个字符串。在使用InputStream o DataInputStream时,也许我可以使用BufferedInputStream,但我不知道如何使用它,我一直在搜索bu,我不知道它是如何工作的,我正试图做这样的事情。
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只返回一个字节(如果有(。解决方法如下:
- 检查流中是否有可用数据(可用数据应返回非空字节数(
- 用现有内容填充一个新的字节数组(后来转换为String(:用read(byte[]字节(
然后您可以使用提取的数据:(
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(字节%5B%5D%20b(%20方法,数据%20可用%20到%20读取。
使用扫描仪确实更容易实现:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
System.out.println("input: "+sc.nextLine());
}
}