bufferedReader的一些问题

时间:2012-04-03 17:05:46

标签: java function bufferedreader

我有一个java函数如下:

 public HashMap<String, ArrayList<Double>> embedWords(BufferedReader buffR1 {              
   ArrayList<String > arrayList = new ArrayList<String>();
   arrayList = getWords(buffR1);
   System.out.println("Word size:"+ arrayList.size());

       ArrayList<ArrayList<Double>> arrList = getWordFeature(buffR1);
   System.out.println("Size of arrList:embedWords:"+arrList.size());
     }

这里的问题是,函数 getWords getWordFeatures都不能给出大小值。当我评论函数getWords时,函数getWordFeature返回非零值。但是当取消注释时,输出如下:

Word size:15055
Size of arrList:embedWords: 0

2 个答案:

答案 0 :(得分:4)

所以你基本上告诉我们,BufferedReader会“吃掉”你的输入,一旦被消化,就没有“再读一遍”?

嗯,这并不奇怪,因为流和读者都是这样设计的。

答案 1 :(得分:1)

getWords函数在调用buffR1函数时已经读取了getWordFeature流的内容。在调用流之前,您需要先读取流的内容以避免它。

您可能需要先将内容读入数组,然后将其称为barr

ByteArrayOutputStream bout = new ByteArrayOutputStream();
int c;
while ((c = buffR1.read()) != -1) {
  bout.write(c);
}
byte[] barr = bout.toByteArray();

然后使用ByteArrayInputStream调用函数,内容为barr

getWords(new ByteArrayInputStream(barr));
getWordFeature(new ByteArrayInputStream(barr));

如果您无法更改/重构方法,我认为这是最佳解决方案。如果你作为一个类正确地实现它,这个解决方案会非常酷。