我遇到了一个奇怪的问题:同样的代码在原生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]原生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上进行了尝试,得到了相同的结果。我也尝试过在真实的设备上运行它,我也得到了同样的结果。
发布于 2011-11-09 07:13:42
基本上,Android StreamTokenizer的实现是一团糟。从源代码看,nextToken()解析前一个nextToken()读取的字符,除非它是流中的第一个字符。在我的例子中,'[‘字符已经被第三个nextToken()读取。当调用第四个nextToken()时,将读取数字4,但会输出'‘。然后read()会像预期的那样读取'‘。然后,第5个nextToken()打印出'4‘,这个’4‘已经被第4个nextToken()读入,并且它继续这样。因此,考虑到当前的实现,不能将read()和nextToken()混为一谈。
https://stackoverflow.com/questions/8003404
复制相似问题