2008-10-14 75 views
3

我正在使用MIDP 2.0(JSR 118),我只注意到在J2ME中沒有字符串閱讀器。如何在J2ME中讀取字符串?

有沒有人知道你應該如何以獨立於平臺的方式(即在兩個不同型號的兩個支持Java的手機之間)從InputStreamInputStreamReader中讀取字符串?

回答

5

你正在使用哪個配置文件? JSR 118中的MID配置文件指定了InputStreamReader(不是StringReader,但這無助於您從InputStream讀取)。

編輯:爲了反映這一變化的問題:)

您使用InputStreamReader.read(的char [],INT,INT),當您已經閱讀所有你想,創建從一個新的字符串字符數組。如果您想像BufferedReader一樣讀取一行文本,您基本上需要自己實現BufferedReader的功能(保持「讀取但未被佔用」字符的緩衝區)並繼續讀取,直到您找到換行符。

+0

是的,我正在使用MIDP 2.0(JSR 118)。編輯我的問題。我想知道是否有某種方法可以從任何給定的InputStream中讀取字符串。 – Spoike 2008-10-14 07:44:54

1

你能提供一個這樣的例子嗎?

您使用InputStreamReader.read(char[], int, int)並且當您閱讀完所有內容時,請從char數組中創建一個新字符串。如果您想像從BufferedReader那樣一次讀取一行,您基本上需要自己實現BufferedReader的功能(保留「讀取但未消耗」字符的緩衝區)並繼續讀取,直到您遇到換行符爲止。

3

呃...我知道這是一個很長的時間。

你需要做的正是約翰所說的,而且非常簡單。它幾乎花了我5個小時才能第一次找出這個問題......

我仍然想知道爲什麼j2ME沒有包括像socket的BufferedReader方法那樣必不可少的東西,它不像freakin手機會碰撞它...是的,如果我的應用運行速度比應該慢1ms,那麼我不會給老鼠的屁股。

(我只是把相關的代碼,我假設你知道如何形成類和導入所需的庫)

ServerSocketConnection listener 
    = (ServerSocketConnection)Connector.open("socket://:1235"); 
System.out.println("Waiting for connection..."); 
StreamConnection server = listener.acceptAndOpen(); 
InputStream is = server.openInputStream(); 

//Now comes the fake BufferedReader equivalent part 

int ch = 0; 
StringBuffer sb = new StringBuffer(); 

while ((ch = is.read()) != -1){ 
    sb.append((char)ch); 
    if(sb.charAt(sb.length()-1) == 13) { 
     //Carriage return was received or ENTER was pressed 
     break; //Exit loop and print input 
    } 
} 

正如你所看到的,is.read()方法將鎖定線程,直到從用戶接收一次一個字節的新輸入。這意味着如果使用telnet進行測試,每次擊鍵都會使循環迭代一次,因此,我們只需在StringBuffer中將字符逐字符連接起來,直到接收到字符13。

System.out.println(sb.toString()); 

我希望這可以幫助人們試圖在J2ME上做套接字服務器。我已經爲黑莓手機制作了一個全功能的多線程版本,以防萬一需要它。

+0

感謝或編輯g。豎起大拇指 – 2011-11-03 03:27:18