我遇到了这个奇怪的问题:相同的代码在Native Java中产生的结果与在Android中不同。
InputStreamReader reader = new InputStreamReader(in, "UTF-8");
BufferedReader m_reader = new BufferedReader(reader);
StreamTokenizer m_tokenizer = new StreamTokenizer(m_reader);
m_tokenizer.nextToken();
System.out.println(m_tokenizer.toString());
m_tokenizer.nextToken();
System.out.println(m_tokenizer.toString());
m_tokenizer.nextToken();
System.out.println(m_tokenizer.toString());
m_tokenizer.nextToken();
System.out.println(m_tokenizer.toString());
int c = m_reader.read();
System.out.println(c);
m_tokenizer.nextToken();
System.out.println(m_tokenizer.toString());
m_tokenizer.nextToken();
System.out.println(m_tokenizer.toString());
给定以下Inputstream(从文件中读取)
(;FF[4]CA[UTF-8]
Native Java打印出来
Token['('], line 1
Token[';'], line 1
Token[FF], line 1
Token['['], line 1
52
Token[']'], line 1
Token[CA], line 1
正如所料。但在Android中我得到了:
Token['('], line 1
Token[';'], line 1
Token[FF], line 1
Token['['], line 1
93
Token[n=4.0], line 1
Token[CA], line 1
为什么它在Android Java中表现不同?在Android中,不知何故,在令牌化器到达之前,字符']'将从流中取出。我已经阅读过Java文档和Android文档,这些类似乎是相同的。
我的API级别设置为7.我已尝试在Android 2.1 Emulator和Android 4.0 Emulator上获得相同的结果。我也尝试在真实设备上运行它,我也得到了相同的结果。
答案 0 :(得分:2)
基本上,Android StreamTokenizer实现搞砸了。通过查看源代码,nextToken()
解析前一个nextToken()
读取的字符,除非它是流中的第一个字符。就我而言,'['字符已被第3 nextToken()
个读取。调用第4 nextToken()
时,读取数字4但打印'['。然后read()
按预期读取']'。然后第五个nextToken()
打印出'4',它已经被第4个nextToken()
读入,并且继续这样。因此,鉴于当前的实现,不能将read()
和nextToken()
混合在一起。