关于类型转换的问题

zhanganow 2003-08-21 10:37:57
ByteBuffer buffer = ByteBuffer.allocate(41); //41为自定义的类的大小
buffer.put(buff,0,41); //buff 为我得到的数据包
现在我该如何将buffer还原为我定义的类啊!
既可以实现 buffer.get(MyDefineClass,41);
...全文
22 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanganow 2003-08-22
  • 打赏
  • 举报
回复
但确实是一个结构体啊!
是这样的情况:
受到服务器中受到数据包,数据包是许多的结构体(用vc写的struct )!保存到ByteBuffer 中!
我在取出41个byte,一个结构体的大小,结果就出现上面的问题了!
cbhyk 2003-08-22
  • 打赏
  • 举报
回复
这说明dat中取到的数据不是一个对象
zhanganow 2003-08-22
  • 打赏
  • 举报
回复
错误为java.io.StreamCorruptedException: invalid stream header
zhanganow 2003-08-22
  • 打赏
  • 举报
回复
TO :cbhyk()
ObjectInputStream ois = new ObjectInputStream(bis);
这句话跳出一个异常啊!
怎么回事啊!
谢谢啊
cbhyk 2003-08-22
  • 打赏
  • 举报
回复
是不是这个意思:
ByteBuffer buffer = ...
...
byte[] dat = buffer.getBytes(0, 41);
ByteArrayInputStream bis = new ByteArrayInputStream(dat);
ObjectInputStream ois = new ObjectInputStream(bis);
MyDefineClass obj = (MyDefineClass) ois.readObject();
zhanganow 2003-08-22
  • 打赏
  • 举报
回复
我的问题很急啊!!!!!
怎么没有人理我啊!
5555555555555555555555555555555555555
cbhyk 2003-08-22
  • 打赏
  • 举报
回复
我是重庆的,上不了QQ
zhanganow 2003-08-22
  • 打赏
  • 举报
回复
多些,你是什么地方的啊?
我是杭州的!愿与你交个朋友!我的QQ:26065534
cbhyk 2003-08-22
  • 打赏
  • 举报
回复
如果是用于表示,-127~128和0~255没什么区别,都是0x00~0xff
如果用于计算和显示,把它和0xff相与就成了整数0~255
zhanganow 2003-08-22
  • 打赏
  • 举报
回复
TO cbhyk:
byte就是8位,但它表示-127----128 啊。
我要表示为0---255
谢谢你的指教
能把你的联系方式告诉我吧!我感觉你好厉害啊?
cbhyk 2003-08-22
  • 打赏
  • 举报
回复
byte就是8位
zhanganow 2003-08-22
  • 打赏
  • 举报
回复
再问cbhyk

我在VC中有一个unsigned byte 来放一个0~~255的数字
现在在java中有数据类型来放0~255的数呢?要求是一个字节啊!就是8位啊!
不能有short int 或long
zhanganow 2003-08-22
  • 打赏
  • 举报
回复
谢谢!
cbhyk 2003-08-22
  • 打赏
  • 举报
回复
Java对象和vc的struct的二进制结构是完全不一样的,不可能直接转换成Java对象,只用Java重新实现该struct。如:

在vc中:
struct data_struct
{
long data1;
char data2;
...
};

在Java中
public class DataStruct
{
int data1;
byte data2;
...

public DataStruct(byte[] data)
{
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data));
data1 = dis.readInt();
data2 = dis.readByte();
...
}
}
zhanganow 2003-08-21
  • 打赏
  • 举报
回复
兄弟们,好象都不行啊!
我的意思是
ByteBuffer buffer = ByteBuffer.allocate(41); //41为自定义的类的大小
buffer.put(buff,0,41); //buff 为我得到的数据包
现在我该如何将buffer还原为我定义的类啊!
既MyDefineClass MyClass = new MyDefineClass();
如何将buffer中的内容给MyClass

谢谢楼上的兄弟们个的建议!
jyn01 2003-08-21
  • 打赏
  • 举报
回复
用强制类型转换因该没有问题吧。
huancaimihai 2003-08-21
  • 打赏
  • 举报
回复
直接向上转型就可以了
楼上说的都对
whyxx 2003-08-21
  • 打赏
  • 举报
回复
直接用你定义的类强制转换就可以了
(Mybuffer)buffer.get(MyDefineClass,41);
TomClus8888 2003-08-21
  • 打赏
  • 举报
回复
如果你获得的数据包本身就是MyDefineClass强制得到的BYTE数据包,那么楼上的办法是一定可行的。或者说存在类的继承关系时候,也可以,不过顺序是有要求的。
topbit 2003-08-21
  • 打赏
  • 举报
回复
是要实现
Class buffer.getClass(long from, long offset)
吗?
加载更多回复(5)

62,614

社区成员

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

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