首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用read()之后,我的InputStream信标将为空

问调用read()之后,我的InputStream信标将为空
EN

Stack Overflow用户
提问于 2013-10-19 10:29:46
回答 3查看 2.1K关注 0票数 0

我正在制作一个表单,将几幅图片上传到mysql数据库中的blob字段。

在servlet中,我使用type=“文件”获取用户上传的所有图像。

在将图像插入数据库之前,我必须检查type=“文件”是否为空文件。为了做到这一点,根据代码的当前结构,我执行以下操作:

代码语言:javascript
复制
  if(allegatoInputStream.read()>-1){....  
//allegatoInputStream is my InputStream

但是,在调用read()方法后,我的InputStream变为空,因此在blob字段中没有任何要插入的内容。

我做了这样的事

代码语言:javascript
复制
InputStream InputStream_FOR_THE_CHECK = blablabla.getInputStream();
  if(InputStream_FOR_THE_CHECK.read()>-1){....  

但我不认为这是我想做的事的正确方式

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-19 11:19:22

您可以将流包装在一个PushbackInputStream中,读取一个字节以查看是否有内容,如果存在,则将该字节向前推。只要您在处理文件内容时使用相同的PushbackInputStream实例,该字节就会成为流的一部分。

票数 0
EN

Stack Overflow用户

发布于 2013-10-19 11:20:43

read()调用从流中读取一个字节,并将其丢弃。您需要将结果存储在变量中,将其测试为-1,如果不是,则使用它。它是流中下一个字节的值。

票数 0
EN

Stack Overflow用户

发布于 2013-10-19 11:09:56

您可以使用inputStream.available()。来自JavaDoc

返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会在下次调用该输入流的方法时阻塞这些字节数。下一个调用可能是同一个线程或另一个线程。单个读取或跳过这么多字节不会阻塞,但可能读取或跳过较少的字节。 请注意,虽然InputStream的某些实现将返回流中的总字节数,但许多不会返回。使用此方法的返回值分配缓冲区以保存此流中的所有数据是永远不正确的。 如果通过调用close()方法关闭了该输入流,则该方法的子类实现可以选择抛出一个IOException。

在您的场景中:

代码语言:javascript
复制
if(allegatoInputStream.available()>0){....  
//allegatoInputStream is my InputStream
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19465031

复制
相关文章

相似问题

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