如何在 J2ME 中读取字符串?

Posted

技术标签:

【中文标题】如何在 J2ME 中读取字符串?【英文标题】:How do I read strings in J2ME? 【发布时间】:2008-10-14 07:20:51 【问题描述】:

我正在使用 MIDP 2.0 (JSR 118),我刚刚注意到 J2ME 中没有字符串阅读器。

有谁知道您应该如何以独立于平台的方式(即在两个不同型号的启用 java 的手机之间)从 InputStreamInputStreamReader 读取字符串?

【问题讨论】:

【参考方案1】:

您使用的是哪个配置文件? JSR 118 中的 MID 配置文件指定 InputStreamReader(不是 StringReader,但无论如何这无助于您从 InputStream 中读取)。

编辑:反映问题的变化:)

您使用 InputStreamReader.read(char[], int, int) 并在您阅读完所有内容后,从 char 数组创建一个新字符串。如果您想像从 BufferedReader 一样一次读取一行,则基本上需要自己实现 BufferedReader 的功能(保留“已读取但未消耗”字符的缓冲区)并继续读取直到遇到换行符。

【讨论】:

是的,我正在使用 MIDP 2.0 (JSR 118)。编辑了我的问题。我想知道是否有某种方法可以从任何给定的 InputStream 中读取字符串。【参考方案2】:

或者看看DataInputStream.readUTF()

确实需要对从 InputStream 中读取的字符串进行适当编码(如通过相应的DataOutputStream.writeUTF(String)),因此它可能不是您要查找的内容 - 但它确实适用于不同的手机/型号等。

【讨论】:

【参考方案3】:

嗯...我知道这是很久以前的事了。

你需要完全按照约翰所说的去做,而且非常简单。第一次弄明白这个问题几乎花了我 5 个小时……

我仍然想知道为什么 j2ME 没有包含像 BufferedReader 套接字方法这样重要的东西,这不像是该死的手机会因此而崩溃……是的,如果我的应用程序运行速度比应有的慢 1 毫秒。

(我只是放相关代码,我假设你知道如何形成类和导入所需的库)

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 中将 char 逐个连接起来,直到收到 char 13。

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

我希望这对尝试在 j2ME 上创建套接字服务器的人们有所帮助。我已经为黑莓制作了一个功能齐全的多线程版本,以防万一有人需要。

【讨论】:

【参考方案4】:

你能举个例子吗?

您使用InputStreamReader.read(char[], int, int) 并在您阅读完所有内容后,从 char 数组创建一个新字符串。如果您想像从BufferedReader 一样一次读取一行,则基本上需要自己实现 BufferedReader 的功能(保留“已读取但未消耗”字符的缓冲区)并继续读取直到遇到换行符.

【讨论】:

以上是关于如何在 J2ME 中读取字符串?的主要内容,如果未能解决你的问题,请参考以下文章

在 J2ME 中读取文本文件

j2me - 如何使用 RMS 存储自定义对象

如何在诺基亚 Asha 的 J2ME 中将对象转换为字符串?

如何在 j2me 中创建保存和读取 XML 文件

J2ME/Blackberry - 如何读/写文本文件?

如何在 j2me 中将 12 小时时间转换为 24 小时时间?