日期:2014-05-20  浏览次数:20605 次

求助ByteBuffer操作socket问题
ByteBuffer buf 这个,我可以把每次读取的东西再用ByteBuffer buf对象叠加起来吗。我这个是Socket读取数据
。传来的数据,中英文都有,因为数据很长,所以要分批次读取。比如说每次读1024个字节,但是读到1024时,可能出现半个汉子。所以想全部读取出来再解码。ByteBuffer byteBuffer = ByteBuffer.allocate(BUFFERSIZE);

------解决方案--------------------
如果数据量不是很大的情况下,可以用ByteArrayOutputStream解决。如果数据量很大的话,就建议用磁盘文件来解决。
------解决方案--------------------
1.优先要求socket通讯,传过来的数据不存在中文截断的情况
2.如果只能在接收端修改,那么量大的时候,可以考虑一边处理一边接收
------解决方案--------------------
“因为数据很长”,长到什么程度?
1、数据长度内存能接受,就全部接收完成才进行字符转换
2、如果数据大到需要保存到本地,那么转换的时候也还有读取半个字符问题,个人猜想是否可以判断读取的末尾字节的acsii码决定是否需要继续读取下一个字节

鄙人陋解,待大神解决
------解决方案--------------------
引用:
“因为数据很长”,长到什么程度?
1、数据长度内存能接受,就全部接收完成才进行字符转换
2、如果数据大到需要保存到本地,那么转换的时候也还有读取半个字符问题,个人猜想是否可以判断读取的末尾字节的acsii码决定是否需要继续读取下一个字节

鄙人陋解,待大神解决


编码各种各样,对是否是完整汉字的判断也是一件巨大的麻烦
其实鉴于降低模块耦合的问题,通信模块压根不应该管是不是完整汉字,判断最后一个字节是不是有效汉字的问题应该交给接收方来另作判断,对于不完整的字符,先不处理,等下一批数据来了再拼起来处理。