package cn.vicky.utils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.nio.ByteBuffer;
import org.apache.mina.core.buffer.IoBuffer;
/**
* 对象序列化,反序列化(序列化对象转byte[],ByteBuffer, byte[]转object
*
* @author Vicky
* @email eclipser@163.com
*/
public class ByteUtil {
public static byte[] getBytes(Object obj) throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(obj);
out.flush();
byte[] bytes = bout.toByteArray();
bout.close();
out.close();
return bytes;
}
public static Object getObject(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
ObjectInputStream oi = new ObjectInputStream(bi);
Object obj = oi.readObject();
bi.close();
oi.close();
return obj;
}
public static Object getObject(ByteBuffer byteBuffer) throws ClassNotFoundException, IOException {
// 需要mina框架的IoBuffer
IoBuffer buffer = IoBuffer.allocate(byteBuffer.capacity()).setAutoExpand(true); // 自动展开
for (int i = 0; i < byteBuffer.capacity(); i++) {
byteBuffer.position(i);
buffer.put(byteBuffer.get());
}
buffer.position(0);
InputStream input = buffer.asInputStream();
ObjectInputStream oi = new ObjectInputStream(input);
Object obj = oi.readObject();
input.close();
oi.close();
return obj;
}
public static ByteBuffer getByteBuffer(Object obj) throws IOException {
byte[] bytes = ByteUtil.getBytes(obj);
ByteBuffer buff = ByteBuffer.wrap(bytes);
return buff;
}
}
以上实现了Java之间的转换,关于Java与ActionScript之间的数据传输与转换。主要思想同上暂时不予讨论。。。
分享到:
相关推荐
- `ByteBuffer` 和 `ByteOrder` 类可用于将字节数组转换为整数,反之亦然。 **二、基本数据类型与字节的转换** Java中,基本数据类型与字节的转换主要通过位运算和位移操作实现,也可以使用`ByteBuffer`类。例如...
5. **处理二进制数据**:在实际应用中,我们可能需要将图片数据转换为`java.io.InputStream`或`java.nio.ByteBuffer`等类型,以便于处理。例如,在服务端接收时,我们需要从`InputStream`读取数据;在客户端发送时,...
2. 重构图像:将字节数组转换回像素值,可以使用ByteBuffer和DataBuffer类来辅助这一过程。 3. 创建BufferedImage:根据重构的像素值创建新的BufferedImage对象。 4. 显示或保存:可以使用ImageIO的write()方法将...
2. **ByteBuf**:Netty 提供了 ByteBuf 类作为缓冲区,它比 Java 的 ByteBuffer 更加高效且易用,支持读写分离,可以更方便地处理网络数据传输。 3. **Channel** 和 **Pipeline**:Channel 表示一个连接,负责实际...
- **`java.lang.Integer#valueOf(String)`**:以及其他基本类型包装类的`valueOf`方法,如`Boolean`, `Byte`, `Character`, `Short`, `Long`, `Float`和`Double`等,用于从字符串转换为相应的基本类型值。...
- `java.lang.Integer#valueOf(String)`:以及`Boolean`、`Byte`、`Character`、`Short`、`Long`、`Float`和`Double`的相似方法,用于将字符串转换为相应的包装类型。 - `java.lang.Class#forName()`:加载类的方法...
当读取到二进制数据列时,可以使用JNBridge提供的方法将.NET的DataBuffer转换为Java的ByteBuffer或ByteArrayOutputStream。 6. **关闭资源**:执行完操作后,记得关闭DataReader、Connection以及任何其他打开的资源...
byte[] data = new byte[1024]; int length = in.read(data); CharBuffer charBuffer = decoder.decode(ByteBuffer.wrap(data, 0, length)); String line = charBuffer.toString(); out.write(line); } } ``` ...