2013-02-11 77 views
0

我編程是對一個JSP採取從表單輸入,然後使用JSON將數據傳遞到一個servlet一個簡單的AJAX應用一個BufferedReader整個字符流。在servlet中,我有以下的快速和骯髒的代碼:閱讀在Java

char[] charBuffer = new char[500]; 
    String[] names; 
    String[] values = new String[20]; 
    int amountRead; 

    JSONObject jsonObject1; 
    JSONObject jsonObject2; 

    PrintWriter out = response.getWriter(); 
    BufferedReader in = request.getReader(); 

    amountRead = in.read(charBuffer); 

    charBuffer[amountRead]='\0'; 
    String invalue = new String(charBuffer, 0, amountRead); 

這是所有然後是try塊做一些事情與JSON對象。基本上,作爲一個練習,我試圖通過相同的表格數據來回並顯示它。

問題出在這裏:在這個快速而骯髒的代碼當然不能保證你從請求中得到完整的消息。明知的BufferedReaderread()方法將返回-1,如果流的末尾已到達,我試着做如下補充:

while(in.read() != -1) { 
     amountRead = in.read(charBuffer); 
    } 

一旦我實現了這一點,但是,我的輸出是空白。我什麼都沒得到。即使試圖通過它與調試步驟後,我不能完全肯定爲什麼while循環沒有達到預期效果。

我敢肯定這件事情簡單的和愚蠢的。有人能夠指出我的方式錯誤嗎?一如既往,先謝謝你。

回答

1

你讀一個字符,然後把它扔了,如果你沒有得到EOS。在Java中讀取流的正確方法是這樣的:

while ((count = in.read(buffer)) > 0) 
{ 
    out.write(buffer, 0, count); 
    // or 
    String s = new String(buffer, 0, count); 
    // or whatever else you want. 
} 

您也不需要插入尾部空字符。這是一個C-ISM。你已經通過指定計數來限制字符串,所以空字符甚至不會被看到。

+0

謝謝你的幫助,EJP。正是我在尋找的答案。 – 2013-02-12 12:56:16

1

BufferedReader.readLine()方法將讀取在一個時間只有一個線和各讀取將阻塞,直到數據可用。當到達流的末尾時它將返回null。

所以在while循環,你可以使用

String line; 
BuffererReader br = request.getReader(); 
while ((line = br.readLine()) != null) { 
    //process the line here 
} 

你也可以使用一個圖書館一樣Gson從而可以deserialise a Java class from a Reader你。