首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓系统中意外的StreamTokenizer行为

安卓系统中意外的StreamTokenizer行为
EN

Stack Overflow用户
提问于 2011-11-04 07:52:15
回答 1查看 227关注 0票数 5

我遇到了一个奇怪的问题:同样的代码在原生Java中产生的结果与在Android中不同。

代码语言:javascript
复制
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 (从文件读取)

代码语言:javascript
复制
(;FF[4]CA[UTF-8]

原生Java打印输出

代码语言:javascript
复制
Token['('], line 1
Token[';'], line 1
Token[FF], line 1
Token['['], line 1
52
Token[']'], line 1
Token[CA], line 1

不出所料。但在Android中,我得到了:

代码语言:javascript
复制
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上进行了尝试,得到了相同的结果。我也尝试过在真实的设备上运行它,我也得到了同样的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-09 07:13:42

基本上,Android StreamTokenizer的实现是一团糟。从源代码看,nextToken()解析前一个nextToken()读取的字符,除非它是流中的第一个字符。在我的例子中,'[‘字符已经被第三个nextToken()读取。当调用第四个nextToken()时,将读取数字4,但会输出'‘。然后read()会像预期的那样读取'‘。然后,第5个nextToken()打印出'4‘,这个’4‘已经被第4个nextToken()读入,并且它继续这样。因此,考虑到当前的实现,不能将read()nextToken()混为一谈。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8003404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档