`

Object,byte[],ByteBuffer之间的转换

阅读更多
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之间的数据传输与转换。主要思想同上暂时不予讨论。。。
分享到:
评论

相关推荐

    radix:各种进制之间的转换,基本数据类型转换成字节,对象与字节间的转换,对象转换成字节存入文件,从字节文件中读取文件并转换成对象

    - `ByteBuffer` 和 `ByteOrder` 类可用于将字节数组转换为整数,反之亦然。 **二、基本数据类型与字节的转换** Java中,基本数据类型与字节的转换主要通过位运算和位移操作实现,也可以使用`ByteBuffer`类。例如...

    axis 接口传图片等二进制文件

    5. **处理二进制数据**:在实际应用中,我们可能需要将图片数据转换为`java.io.InputStream`或`java.nio.ByteBuffer`等类型,以便于处理。例如,在服务端接收时,我们需要从`InputStream`读取数据;在客户端发送时,...

    图片在字段中的存储与读取

    2. 重构图像:将字节数组转换回像素值,可以使用ByteBuffer和DataBuffer类来辅助这一过程。 3. 创建BufferedImage:根据重构的像素值创建新的BufferedImage对象。 4. 显示或保存:可以使用ImageIO的write()方法将...

    nettyObject:关于 netty 的例子

    2. **ByteBuf**:Netty 提供了 ByteBuf 类作为缓冲区,它比 Java 的 ByteBuffer 更加高效且易用,支持读写分离,可以更方便地处理网络数据传输。 3. **Channel** 和 **Pipeline**:Channel 表示一个连接,负责实际...

    JDK中的设计模式应用实例

    - **`java.lang.Integer#valueOf(String)`**:以及其他基本类型包装类的`valueOf`方法,如`Boolean`, `Byte`, `Character`, `Short`, `Long`, `Float`和`Double`等,用于从字符串转换为相应的基本类型值。...

    JDK中的设计模式

    - `java.lang.Integer#valueOf(String)`:以及`Boolean`、`Byte`、`Character`、`Short`、`Long`、`Float`和`Double`的相似方法,用于将字符串转换为相应的包装类型。 - `java.lang.Class#forName()`:加载类的方法...

    DataBuffer在Java中使用ADO.NET源码示例

    当读取到二进制数据列时,可以使用JNBridge提供的方法将.NET的DataBuffer转换为Java的ByteBuffer或ByteArrayOutputStream。 6. **关闭资源**:执行完操作后,记得关闭DataReader、Connection以及任何其他打开的资源...

    Mina2.0完全剖析,完全自学手册

    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); } } ``` ...

Global site tag (gtag.js) - Google Analytics