blob读取,字节数组读取出错 本帖最后由 magi1201 于 2014-07-26 11:34:28 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 while ((out = fis.read(outByte)) != -1) { dos.write(out);}两颗星大神在卖萌吗。。数据在outByte里,你把out写进文件。。 额 这个没有问题吧,outByte 是个字节数组,只是告诉fis,每次读取这么多字节出来读出来后,然后将字节给out,将out写出。这个有问题吗 对流部分不熟悉,就来问问,不要鄙视啊 额 这个没有问题吧,outByte 是个字节数组,只是告诉fis,每次读取这么多字节出来读出来后,然后将字节给out,将out写出。这个有问题吗 对流部分不熟悉,就来问问,不要鄙视啊我只是一个星期没碰Java了而已,不至于这个都记错了吧。。我清楚地记得InputStream的这个方法int read(byte[] buf)是最多读入buf.length字节,存储在buf里,返回一个int,表示实际读了多少字节。你这样只是把每次读了多少字节写进了文件啊,你可以用WinHex等工具看看文件内容,肯定是一堆100如果你byte[100],或者是一堆10如果你byte[10]。 额 这个没有问题吧,outByte 是个字节数组,只是告诉fis,每次读取这么多字节出来读出来后,然后将字节给out,将out写出。这个有问题吗 对流部分不熟悉,就来问问,不要鄙视啊反过来说你这样的功能也不可能实现啊,out是一个int,怎么可能存储多个字节,最多就4个字节,而outByte是一个字节数组,如果你只是要告诉read需要读多少字节,直接传int类型不就好了,不至于浪费一个字节数组,就是为了告诉read需要多少字节吧? 为什么读取流的把文件读进数组,而写入流把int out写进输出流,不是应该把 outByte数组写进去么?难道我看错了么? 这是个复杂的问题这和硬件配置 操作系统 文件系统 流的类型 实现方式等等都有很大关系通常一般的做法是,用一个BufferdStream(比如BufferedInputStream BufferedOutputStream),来包装你的底层Stream,然后用一个大小为2的幂的缓冲数组来操作这个BufferedStream,这个大小不要超过BufferedStream的默认缓冲大小,一般设为1024或2048比较合适。如果你觉得中间夹一层BufferedStream有损效率(实际这点效率损失几乎可以忽略,除非你说的是千万用户级别超大型密集运算),那不通过BufferedStream也可以,但你这个缓冲的大小就需要自己尝试哪个好,通常这个大小也是2的幂,并且在一定范围内越大越好(一般这个范围指不超过16K),另外注意如果是操作文件,一定要使用Block大小的倍数,最常见的Block大小是4K,不过不能保证其他文件系统的Block大小也是4K,但综合考虑4K 8K都是很好的缓冲大小,只要你不是4097这种刚好比4K多1的奇葩缓冲大小性能就基本差不多。或者其他的方法比如NIO的channel能够使用direct memory也就是不经过Java堆的内存或许可以提高一点效率。附上一个别人做的实验,比较有参考性,How big should my input stream buffer be? 总结一下,是自己基础太差了没用心读api,导致今天的这个问题补基础去了 数据引用的问题 下面这个语句创建几个对象啊?为什么 一道笔试题!请求帮忙! 敬请各位老大帮忙!java.sql.SQLException: 违反协议!急急急 请教!怎么把自己载的doc链到jbuilder里! 怎样把char转换成byte数组?给分117!!!!!!!!!!!!!! 我自己在寫一個Application Server,各位可否幫忙? Bean的属性编辑器有什么用,怎么用?谢谢各位! Swing中的JTable这个问题请高手解答,谢谢!!……… 一个小小小小小小问题 求个java算法 netty怎么才能一次接收超过1024字节的字符串
dos.write(out);
}
两颗星大神在卖萌吗。。
数据在outByte里,你把out写进文件。。
额 这个没有问题吧,outByte 是个字节数组,只是告诉fis,每次读取这么多字节出来
读出来后,然后将字节给out,将out写出。
这个有问题吗 对流部分不熟悉,就来问问,不要鄙视啊
额 这个没有问题吧,outByte 是个字节数组,只是告诉fis,每次读取这么多字节出来
读出来后,然后将字节给out,将out写出。
这个有问题吗 对流部分不熟悉,就来问问,不要鄙视啊
我只是一个星期没碰Java了而已,不至于这个都记错了吧。。
我清楚地记得InputStream的这个方法
int read(byte[] buf)
是最多读入buf.length字节,存储在buf里,返回一个int,表示实际读了多少字节。
你这样只是把每次读了多少字节写进了文件啊,你可以用WinHex等工具看看文件内容,肯定是一堆100如果你byte[100],或者是一堆10如果你byte[10]。
额 这个没有问题吧,outByte 是个字节数组,只是告诉fis,每次读取这么多字节出来
读出来后,然后将字节给out,将out写出。
这个有问题吗 对流部分不熟悉,就来问问,不要鄙视啊
反过来说你这样的功能也不可能实现啊,out是一个int,怎么可能存储多个字节,最多就4个字节,而outByte是一个字节数组,如果你只是要告诉read需要读多少字节,直接传int类型不就好了,不至于浪费一个字节数组,就是为了告诉read需要多少字节吧?
难道我看错了么?
这和硬件配置 操作系统 文件系统 流的类型 实现方式等等都有很大关系通常一般的做法是,用一个BufferdStream(比如BufferedInputStream BufferedOutputStream),来包装你的底层Stream,然后用一个大小为2的幂的缓冲数组来操作这个BufferedStream,这个大小不要超过BufferedStream的默认缓冲大小,一般设为1024或2048比较合适。如果你觉得中间夹一层BufferedStream有损效率(实际这点效率损失几乎可以忽略,除非你说的是千万用户级别超大型密集运算),那不通过BufferedStream也可以,但你这个缓冲的大小就需要自己尝试哪个好,通常这个大小也是2的幂,并且在一定范围内越大越好(一般这个范围指不超过16K),另外注意如果是操作文件,一定要使用Block大小的倍数,最常见的Block大小是4K,不过不能保证其他文件系统的Block大小也是4K,但综合考虑4K 8K都是很好的缓冲大小,只要你不是4097这种刚好比4K多1的奇葩缓冲大小性能就基本差不多。或者其他的方法比如NIO的channel能够使用direct memory也就是不经过Java堆的内存或许可以提高一点效率。附上一个别人做的实验,比较有参考性,How big should my input stream buffer be?
总结一下,是自己基础太差了
没用心读api,导致今天的这个问题
补基础去了