作者superlubu (叔叔你人真好)
看板java
标题Re: [问题] socket传送数值出错
时间Thu Jan 17 21:24:05 2008
※ 引述《andykid (宗一郎)》之铭言:
: 问题已经解决了...> <
: 学长说是因为每次read()都要用一个frame
: 所以做了多次的read()
: 造成有资料遗失...
呃... 不知道这样说好不好... 你的学长所说的是完全错误的...
跟什麽 frame 不 frame 的没有任何关系,只是单纯地 write(int b) 写进 stream
去的是
character 而不是 int。所以只会把 lower-byte 的资料送出去
higher-bytes 都会 ignore 掉。
重申一次...
跟什麽 frame 或 packet 完全没有关系,Java API 的 I/O
Stream 是在 Application level,所以是管不了什麽 packet 不 packet 的。
你只要试一试那个使用 Piped I/O 便会知道,那中间没有什麽 packet 交换等等的
东西,但仍然会跑出 63 来。
: 所以才会变成读取到的值都变成63
: 所以我改成用String做read write
: 把所有数值接在一起一次输出一次接收...
: 谢谢大家的回应
我不知道是不是你的程式模组里,只准许使用这个不太好用的 Writer/Reader...
Writer/Reader 是 character based 的,是用来处理 character 的资料的
处理 character 以外的其他资料都是不适合的。
不是说你的那个解决方法不行,只是不太好
若果传送与接收都用 DataOutputStream/InputStream 来代替 BufferedWriter/Reader,
则可以更方便地使用 writeInt, readInt 甚至 float 之类的都可以直接写进去
免却了将数值转成 String 又将 String 转回数值的麻烦。
--
很多人以为 所以我要 其实我是个
我是
大学生 告诉大家 三十一岁的
怪叔叔
● ●/ ︿ ︿
/
劲\ <
劲 ●
ㄨ /\ ㄨ
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.102.77.165
※ 编辑: superlubu 来自: 218.102.77.165 (01/17 21:28)
1F:推 Lordaeron:有这样的学长, 怪不得台湾出哪麽多兵, 真是没得救了. 01/18 06:56