1

我尝试将字符串发送到我的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 不等待任何\nEOFcharapters 并读取123.

请输入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:

有任何想法吗?

4

4 回答 4

5

线

in.read(_source2.getBytes());

不会向输入流添加新信息,而是将其清空,如果有更多数据的话。所以输入流用尽了。

您只需要在下一次调用 readR 之前创建一个新的输入流。所以:

String _source2 = "321";
in = new ByteArrayInputStream(_source2.getBytes("UTF-8"));
_myClass.readR(in);
于 2013-10-26T12:31:51.397 回答
2

您的代码没有意义:

String _source2 = "321";
in.read(_source2.getBytes());

in.read()从 读取字节in,并将读取的内容存储在作为参数传递的字节数组中。所以基本上,上面的代码创建了一个 3 字节长的数组,用 3 个字节填充它,然后尝试从输入流中读取字节,并用结果填充 3 字节长的字节数组。

于 2013-10-26T12:30:58.523 回答
0

您在这里所追求的并不完全清楚,但是在使用Scanner该类时,您可以像这样直接向它发送一个字符串:

Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();

依此类推.. 当然,这是假设您从控制台获取输入。

于 2013-10-26T12:47:12.280 回答
0

不要使用 InputStream 来处理字符,使用 Reader。

此外,在您的第二个示例中,您没有做您认为您正在做的事情。您没有将_source2字节添加到输入流中。相反,您正在尝试重新使用原始 InputStream 中的原始字节,该字节现在为空。

于 2013-10-26T12:31:11.200 回答