2012-04-03 4 views
0

일부 문제는 내가 자바 기능을 가지고 :다음의 BufferedReader

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입니다.

Word size:15055 
Size of arrList:embedWords: 0 

답변

4

그래서 당신은 기본적으로 BufferedReader는 귀하의 의견을 '먹는'것, 우리에게 이야기하고는, 한 번에 소화 : 내가 getWords 아닌 값 나누었다 때 주석을 반환 getWordFeature 기능 기능을 언급하면 ​​다음과 같이 출력은 , "다시 읽으십시오"는 없습니다.

스트림과 독자가 이와 같이 설계되어 있기 때문에 이것은 놀라운 일이 아닙니다.

+0

이 상황을 어떻게 극복하겠습니까? – thetna

+0

'getWords()'와'getWordFeature()'가 입력을 한 번 읽는 한가지 방법으로 할 수 있습니다. – darrengorman

+0

또는'getWords'가 독자를 읽고 단어로 나누면'getWordFeature (Reader r)'을'getWordFeature (List words)'로 다시 쓸 수 있습니다. –

1

함수는 getWordFeature 함수가 호출 될 때까지 buffR1 스트림의 내용을 이미 읽었습니다. 스트림을 피하기 위해 스트림의 내용을 읽어야합니다.

먼저 내용을 배열로 읽으려는 경우 barr으로 전화 할 수 있습니다. barr의 내용과 ByteArrayInputStream를 사용하여 함수를 호출

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

그리고.

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

나는이 방법을 바꾸거나 리팩터링 할 수 없다면 이것이 최선의 해결책이라고 생각합니다. 이 솔루션은 클래스로 올바르게 구현하면 매우 멋지게됩니다.

관련 문제