我尝试将字符串发送到InputStream
:
String _source = "123";
InputStream in = new ByteArrayInputStream(_source.getBytes("UTF-8"));
tempLab2.readR(in);
String _source2 = "321";
in.read(_source2.getBytes());
_myClass.readR(in);
当我创建新的ByteArrayInputStream
并将_source
设置为参数时,一切都运行良好。我的方法readR不会等待任何\n
或EOF
个字符并读取123
。
请输入R:
R:123
readR
方法:
public void readR(InputStream inpSteram) {
Scanner tScanner = new Scanner(inpSteram);
System.out.println("Please enter R:");
_R = tScanner.nextDouble();
System.out.println("R: " + _R);
}
但是,如果我使用_source2
发送in.read(_source2.getBytes())
,那么我的Scanner
正在等待,我只看到
请输入R:
有什么想法吗?
答案 0 :(得分:3)
该行
in.read(_source2.getBytes());
如果有更多数据,不会向输入流添加新信息,而是将其清空。所以输入流已经耗尽。
您只需在下次调用readR之前创建一个新的输入流。所以:
String _source2 = "321";
in = new ByteArrayInputStream(_source2.getBytes("UTF-8"));
_myClass.readR(in);
答案 1 :(得分:2)
您的代码没有意义:
String _source2 = "321";
in.read(_source2.getBytes());
in.read()
从in
读取字节,并将其读取的内容存储在作为参数传递的字节数组中。基本上,上面的代码创建了一个3字节长的数组,用3个字节填充它,然后尝试从输入流中读取字节,并用结果填充3字节长的字节数组。
答案 2 :(得分:0)
不要使用InputStream处理字符,请使用Reader。
另外,在你的第二个例子中,你没有做你认为自己在做的事情。您没有将_source2
个字节添加到输入流。相反,您尝试重新使用原始InputStream中的原始字节,现在为空。
答案 3 :(得分:0)
你在这里所做的并不完全明显,但是当使用Scanner
类时,你可以直接发送一个字符串,如下所示:
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
依此类推。当然,这是假设您正在从控制台获取输入。