问问InputStream 的 available方法??

hchmy 2006-12-22 03:56:14
available
public int available()throws IOException

返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数。下一个调用方可能是同一个线程,也可能是另一个线程。

//类 InputStream 的 available 方法总是返回 0。//=====》??

此方法应该由子类重写。

返回:
可以不受阻塞地从此输入流读取的字节数。
抛出:
IOException - 如果发生 I/O 错误。




类 InputStream 的 available 方法总是返回 0//???
//======================
总是返回 0? 是什么意思啊?
available 方法不就是返回可用的字节个数吗?


...全文
434 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
HugeJB 2006-12-26
  • 打赏
  • 举报
回复
available()是InputStream的方法
DataInputStream 是继承自InputStream的

根据我的理解,
手机上返回available的值,是跟KVM的实现方式有关的
对于一个文件流
KVM可能选择把这个文件全部读入到内存中(这貌似比较傻),可能是分段读入若干个字节,比如512(我再K700上得到这个值),也可能根本一个都不真正读进来(这时返回就是0)

所以,最保险的方式还是把前4个byte表示成你这个文件包的大小
读取这4个Byte后,可以得到你要创建的Buffer的大小了
hchmy 2006-12-25
  • 打赏
  • 举报
回复
明白了,我还以为 javaAPI 和 j2me 里面相同的类没有什么区别!

j2me 的 DataInputStream类 对 javaAPI 中的DataInputStream 类进行了补充。

怪不得我看javaAPI 中的DataInputStream没有看到 available 方法。

谢谢了。!
网络咖啡 2006-12-23
  • 打赏
  • 举报
回复
文档不是写的很清楚了,J2ME没有实现该方法,任何时候都返回0。

Returns the number of bytes that can be read (or skipped over) from this input stream without blocking by the next caller of a method for this input stream. The next caller might be the same thread or another thread.

The available method for class InputStream always returns 0.

This method should be overridden by subclasses.
cxc014 2006-12-22
  • 打赏
  • 举报
回复
总是返回 0? 是什么意思啊?


//类 InputStream 的 available 方法总是返回 0。//=====》??

此方法应该由子类重写。
这不是已经说明了吗,这个方法在InputStream没有实现,耍是直接返回0,如果你需要这个功能请用它的子类DataInputStream 或 ByteArrayInputStream


不要相信这个方法
否则你会死的很惨!
==================================>
很多手机的虚拟机在实现这个函数时都有问题,返回值不准确
hchmy 2006-12-22
  • 打赏
  • 举报
回复
不要相信这个方法
否则你会死的很惨!
==================================>

怎么了?

有什么坏处?


















HugeJB 2006-12-22
  • 打赏
  • 举报
回复
不要相信这个方法
否则你会死的很惨!

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧