Java:将字符串发送到输入流

时间:2013-10-26 12:23:19

标签: java inputstream

我尝试将字符串发送到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不会等待任何\nEOF个字符并读取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:

有什么想法吗?

4 个答案:

答案 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();

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