作者sbrhsieh (sbr)
看板java
标题Re: [问题] DataOutput传输档案的问题
时间Sun Sep 13 18:32:32 2009
※ 引述《reon (完成这条天堂路)》之铭言:
: : //--------------传送端-------------------------------------
: : byte[] buffer=new byte[512];
: : int i;
: : dos=new DataOutputStream(conn.openDataOutputStream());
: 改成ObjectOutputStream oos = new ObjectOutputStream( con..自行完成 );
MIDP 没有 ObjectInputStream/ObjectOutputStream,因为他不支援 serialization。
: : FileInputStream fis=new FileInputStream(new File(FilePath)); //C://1.jpg
: 这行留着
: : while((i=fis.read(buffer))!=-1)
: : dos.write(buffer,0,i);
: : fis.close();
: : dos.close();
: 这段整个改掉 也不用宣告buffer阵列大小了
: BufferedInputStream fin = new BufferedInputStream(fis);
: ByteArrayOutputStream bout = new ByteArrayOutputStream();
: byte[] input = new byte[1];
: while(fin.read(input) !=-1){
: bout.write(input);
: }
: input = bout.toByteArray();
: oos.write(input);
: oos.flush();
: oos.close();
这样子更糟。
InputStream - read(byte[]) 不见得每次都会把指定的 byte array buffer 填满,
你一味把 byte array 全数收集在 ByteArrayOutputStream 会有垃圾 bytes 在里头
(也就是说 ByteArrayOutputStream 收集的 bytes 可能会比 input stream 的 bytes
还多)
虽然上面的问题在 buffer size 为 1 时就不成立,但是总的来说不侦测 read 操作
实际读进多少 bytes 就把 buffer 全数做後续处理是不正确的。
: 这是我硕论时在写网路程式的遇到类似的问题 希望可以解决你的问题
: 因为DataOutputStream在输出的时候好像会加料= =||
: 好像是Header还是啥的问题 输出字串和字元是还不太有问题
: 不过小到像byte的资料似乎会有点问题
你记错了。ObjectOutputStream 才会加料(stream header),DataOutputStream
则不会,他是方便用来传输 primitive 型别数据,让你不需要自己搞 byte level
的事。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.136.1
※ 编辑: sbrhsieh 来自: 218.173.136.1 (09/13 18:33)
※ 编辑: sbrhsieh 来自: 218.173.136.1 (09/13 18:34)
1F:推 PsMonkey:这篇看起来比较正确 XD 09/13 19:18
※ 编辑: sbrhsieh 来自: 218.173.136.1 (09/13 20:05)
2F:推 reon:ByteArrayXXXXXStream这方法是读取/写入 金钥的方式 09/13 22:28
3F:→ reon:基本上不会有问题吧 那时候研究很久才从Java网站找到的 09/13 22:30
4F:→ reon:因为金钥只要错一个bit整个 就无法解密 09/13 22:33
5F:→ reon:所以应该是不会有所谓的多余的东西出来吧@@ 09/13 22:37
6F:→ sbrhsieh:对,在 buffer size=1 时不会有问题(文中有提到) 09/13 23:07