有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java与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) 个答案

  1. # 1 楼答案

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

    这并不奇怪,因为流和读卡器就是这样设计的

  2. # 2 楼答案

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

    您可能希望首先将内容读入一个数组,我们称之为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));
    

    如果你不能改变/重构方法,我认为这是最好的解决方案。如果你把它作为一个类来正确实现,这个解决方案会变得非常酷