我有一个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
答案 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));
如果您无法更改/重构方法,我认为这是最佳解决方案。如果你作为一个类正确地实现它,这个解决方案会非常酷。