输入流当中的read方法和readfully方法的区别与原理 -- 一直纠结的socket传输大图片解决的问题所在

在使用Java Socket传输大图片时遇到DataInputStream和DataOutputStream的readUTF/writeUTF长度限制问题,以及heapOutofMemoryException。通过调整读写方式,利用ByteArrayOutputStream动态增长避免内存溢出,但在使用read方法时出现EOFException。解决方案是使用readFully确保读取完整长度的字节。
摘要由CSDN通过智能技术生成

在做一个通过 DataInputStream in, DataOutputStream   out 读入写出传输图片文件时 遇到了各种错误。终于在调试N久之后给弄出来了。

做一个总结,纪念一下:

1、起初通过自己的网络框架,利用gson图个方便,因此写了一个图片的类Picture,然后像通过设置一个byte数组的属性然后利用gson

     完美独好的 把类转换为json格式的字符串 传过去,然后在另外一边又利用gson直接生成这个类型,我就不必操心它怎么个传法了。

     可是现实是残酷的,世上还真没有那么好的事儿,一运行就各种bug。总结了一下大概是这样:

      a、使用dataInputstream和dataOutstream的readUTF 和 writeUTF 的时候对字符串的长度是有限制的,因此在使用这个传输一个

几十kb的图片的时候就会报错了。更别说我想传输几百kb的图片 = =!

b、使用gson的来读写object的时候同样也是这个问题,gson能解析的字符串的长度也是有限制的。要解析这个庞大的东东,

      想想也是不可能,还是算了吧 ~ ~!

        后来就改呗,既然上层一点的不能完成,我就在下层下工夫:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值