JAVA Socket的read问题

joesonw 2009-10-03 07:51:03
看了一本书的教程 JAVA做服务端
int d_length=100;
byte[] data=new byte[d_length];
...........
in=socket.getInputStream();
d_length=in.read(data)

然后客户端我用AS写的 用的Socket 然后用了writeObject 向JAVA服务端发送了一个OBJECT 请问JAVA端如何读出这个object (此object 在as中: var o:Object=new Object()
o.msg="hello world"
...全文
360 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
swandragon 2009-10-03
  • 打赏
  • 举报
回复
用ObjectInputStream的readObject试试
AldisZhan 2009-10-03
  • 打赏
  • 举报
回复
贴一个做做样子 别被人说我刷屏

构造方法摘要
protected ObjectInputStream()
为完全重新实现 ObjectInputStream 的子类提供一种方式,让它不必分配仅由 ObjectInputStream 的实现使用的私有数据。
ObjectInputStream(InputStream in)
创建从指定 InputStream 读取的 ObjectInputStream。
方法摘要
int available()
返回可以不受阻塞地读取的字节数。
void close()
关闭输入流。
void defaultReadObject()
从此流读取当前类的非静态和非瞬态字段。
protected boolean enableResolveObject(boolean enable)
使流允许从该流读取的对象被替代。
int read()
读取数据字节。
int read(byte[] buf, int off, int len)
读入 byte 数组。
boolean readBoolean()
读取一个 boolean 值。
byte readByte()
读取一个 8 位的字节。
char readChar()
读取一个 16 位的 char 值。
protected ObjectStreamClass readClassDescriptor()
从序列化流读取类描述符。
double readDouble()
读取一个 64 位的 double 值。
ObjectInputStream.GetField readFields()
按名称从流中读取持久字段并使其可用。
float readFloat()
读取一个 32 位的 float 值。
void readFully(byte[] buf)
读取字节,同时阻塞直至读取所有字节。
void readFully(byte[] buf, int off, int len)
读取字节,同时阻塞直至读取所有字节。
int readInt()
读取一个 32 位的 int 值。
String readLine()
已过时。 此方法不能正确地将字节转换为字符。请参见 DataInputStream 以获取详细信息和替代方法。
long readLong()
读取一个 64 位的 long 值。
Object readObject()
从 ObjectInputStream 读取对象。
protected Object readObjectOverride()
此方法由 ObjectOutputStream 的受信任子类调用,这些子类使用受保护的无参数构造方法构造 ObjectOutputStream。
short readShort()
读取一个 16 位的 short 值。
protected void readStreamHeader()
提供的 readStreamHeader 方法允许子类读取并验证它们自己的流头部。
Object readUnshared()
从 ObjectInputStream 读取“非共享”对象。
int readUnsignedByte()
读取一个无符号的 8 位字节。
int readUnsignedShort()
读取一个无符号的 16 位 short 值。
String readUTF()
读取 UTF-8 修改版格式的 String。
void registerValidation(ObjectInputValidation obj, int prio)
在返回图形前注册要验证的对象。
protected Class<?> resolveClass(ObjectStreamClass desc)
加载指定流类描述的本地等价类。
protected Object resolveObject(Object obj)
在反序列化期间,此方法允许 ObjectInputStream 的受信任子类使用一个对象替代另一个。
protected Class<?> resolveProxyClass(String[] interfaces)
返回一个代理类,该类实现在代理类描述符中命名的接口;子类可以实现此方法,以便从流及动态代理类的描述符中读取自定义数据,允许它们使用接口和代理类的替换加载机制。
int skipBytes(int len)
跳过字节。

AldisZhan 2009-10-03
  • 打赏
  • 举报
回复
自己去查流这两个流动API文档吧 因为内容比较多
贴出来很杂
AldisZhan 2009-10-03
  • 打赏
  • 举报
回复
服务器端的Socket得到输入输出流用 ObjectInputStream/ObjectOutputStream 来包装
客户端 也一样
ObjectInputStream/ObjectOutputStream 输入输出流中有个 WriteObject/ReadObject
等等很多方法能实现 需求

舷Kelvin 2009-10-03
  • 打赏
  • 举报
回复
传的时候最好写成传一个字符串,到服务器端再解析这个字符串生成一个对象。xml应该也不错,我没试过。

因为端口那边是什么都不一定,要保证兼容性好呀。
zhoudaoyu 2009-10-03
  • 打赏
  • 举报
回复
首先问下as是C#的东西吗?不懂。

不过如果是通过Socket读取对象的话可以试试这样
in=socket.getInputStream();
ObjectInputStream objin=new ObjectInputStream(in);

再用
while(true)

{
try
{
objin.readObject();
}
catch(Exception e)
{
break;
}
}
objin.close();
in.close();

存放的对象所属类 需要实现java.io.Serializable接口
joesonw 2009-10-03
  • 打赏
  • 举报
回复
那假设它是由JAVA端传的OBJECT该如何读呢?
joesonw 2009-10-03
  • 打赏
  • 举报
回复
如果我是传的BYTE...JAVA端该如何读出来呢?直接System.out.println(data)?
Looking_Glass 2009-10-03
  • 打赏
  • 举报
回复
个人认为不同语言不能传对象?如果你真的要传我个人认为你应该先将对象转化byte[]?然后传到JAVA那里,再NEW一个!
「已注销」 2009-10-03
  • 打赏
  • 举报
回复
socket编程, 一年没搞过了, 学习中

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧