我正在使用MIDP 2.0(JSR 118),我只注意到在J2ME中沒有字符串閱讀器。如何在J2ME中讀取字符串?
有沒有人知道你應該如何以獨立於平臺的方式(即在兩個不同型號的兩個支持Java的手機之間)從InputStream
或InputStreamReader
中讀取字符串?
我正在使用MIDP 2.0(JSR 118),我只注意到在J2ME中沒有字符串閱讀器。如何在J2ME中讀取字符串?
有沒有人知道你應該如何以獨立於平臺的方式(即在兩個不同型號的兩個支持Java的手機之間)從InputStream
或InputStreamReader
中讀取字符串?
或者看看DataInputStream.readUTF()
。
它要求從InputStream中讀取的字符串被正確編碼(如在相應的DataOutputStream.writeUTF(String)
中),因此它可能不是您要查找的內容 - 但它適用於不同的手機/模型等。
你正在使用哪個配置文件? JSR 118中的MID配置文件指定了InputStreamReader(不是StringReader,但這無助於您從InputStream讀取)。
編輯:爲了反映這一變化的問題:)
您使用InputStreamReader.read(的char [],INT,INT),當您已經閱讀所有你想,創建從一個新的字符串字符數組。如果您想像BufferedReader一樣讀取一行文本,您基本上需要自己實現BufferedReader的功能(保持「讀取但未被佔用」字符的緩衝區)並繼續讀取,直到您找到換行符。
你能提供一個這樣的例子嗎?
您使用InputStreamReader.read(char[], int, int)
並且當您閱讀完所有內容時,請從char數組中創建一個新字符串。如果您想像從BufferedReader
那樣一次讀取一行,您基本上需要自己實現BufferedReader的功能(保留「讀取但未消耗」字符的緩衝區)並繼續讀取,直到您遇到換行符爲止。
呃...我知道這是一個很長的時間。
你需要做的正是約翰所說的,而且非常簡單。它幾乎花了我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上做套接字服務器。我已經爲黑莓手機制作了一個全功能的多線程版本,以防萬一需要它。
感謝或編輯g。豎起大拇指 – 2011-11-03 03:27:18
是的,我正在使用MIDP 2.0(JSR 118)。編輯我的問題。我想知道是否有某種方法可以從任何給定的InputStream中讀取字符串。 – Spoike 2008-10-14 07:44:54