1
1
首先将数据读入服务器上的字节数组。编写自己的解析例程,只需识别字节数组中的内容。 第二步根据第一步的标识执行完整的对象解析。如果解析需要传递inputstream,则始终可以将步骤1中读取的字节数组放入新的bytearrayinputstream实例中。 |
2
2
通常,这是通过在包含主体信息的主体前面发送“header”来完成的。看看例如
HTTP protocol
. http流存在一个通过双换行符与正文分隔的头。标题依次存在于
由于Java和TCP/IP不提供这方面的标准设备,所以您需要详细指定并记录您将通过该线路发送的格式,以便另一方知道如何处理流。当然,您也可以获取标准规范。例如http或ftp。 |
3
2
处理这个问题有多种方法。 一个是对象序列化,它通过Java对象(in out out)PutsFoad发送。但是,当知道何时从流中读取对象时,会遇到一个小问题。 另一种方法是封送和解封xml。使用更多的流量,但更容易调试和运行。这有助于有一个文档良好的XML模式。这里的一个优点是可以使用现有的xml库。 如果需要的话,可以尝试自定义格式,但最终可能只是一个草率、不太冗长的xml版本。 |
4
2
一般来说,我不相信Java中有一个特性允许你这样做。 相反,可以考虑在每条消息中同时发送一些更多的信息来解释下一种类型。 例如,您可以用整数对消息进行前缀,这样每当收到消息时,就读取前4个字节(整数为4字节)并解释其值(例如,1=字节数组,2=自定义Java对象,3=另一个自定义Java对象,……)。 您还可以考虑添加一个包含消息大小的整数,以便知道当前消息何时结束,下一消息何时开始。 |
5
2
我会被要求对此进行过度杀戮,但是除非你真的需要这个协议是经济的,否则你可以考虑整理数据。我的意思是,如果不查看数据,你通常无法区分字节数组和其他数组的区别,因为你可以把所有东西都表示为字节数组。 您可以很容易地使用jaxb来在xml之间进行数据整理。jaxb甚至可以将字节数组对象转换为十六进制字符串或base64。 |
6
1
您需要定义一个协议来指示遵循的数据类型。例如,可以用字符串或枚举值开始每次传输。服务器将首先读取此内容,然后根据“header”值读取以下数据。 |
7
0
您可以做的是,用一个用于确定类型的整数来预处理您发送的任何数据。 这样,您可以读取前4个字节,然后确定它是什么类型的数据。 |
8
0
我认为最简单的方法是使用一个对象,该对象包含将与其类型信息一起发送的数据。然后,您可以发送此对象,并根据此对象的数据类型属性提取数据。 |