`
wj_126mail
  • 浏览: 130512 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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;  
    }  
  
}  
分享到:
评论

相关推荐

    Android byte[] 和 String互相转换

    在Android开发中,数据在内存和磁盘之间传输时,我们经常需要在`byte[]`(字节数组)和`String`之间进行转换。这是因为`byte[]`适合处理二进制数据,如图片、音频文件等,而`String`则更适合存储文本信息。本篇将...

    Android中的ByteBuffer解析

    例如,`put(byte b)`写入一个字节,`get()`读取一个字节。 2. **put()和get()的变种**:还有其他版本的put和get方法,如putInt()、putLong()等,用于写入或读取特定类型的数据。 3. **flip()**:在写入数据后,...

    java基本类型与byte数组互相转换.rar

    此外,Java的`DataInputStream`和`DataOutputStream`也可以用来进行基本类型与字节流之间的转换,它们提供了如`readInt()`, `writeInt()`, `readFloat()`, `writeFloat()`等方法。 在实际应用中,需要注意字节顺序...

    ios-byteBuffer:在objective-c中重写一个类

    ios-byteBuffer [![CI状态]( Lee / ios-byteBuffer.svg?style = flat)]( Lee / ios-byteBuffer ) 用法 #分配 ByteBuffer *buffer = [ByteBuffer initWithOrder: ByteOrderLittleEndian]; #输入数据 - ( ...

    java基本类型与byte数组互相转换.pdf

    在Java编程语言中,将基本数据类型转换为字节数组以及从字节数组转换回...Java提供了`java.nio.ByteBuffer`类,它支持对字节序列的操作,并能处理大端字节序(Big-Endian)和小端字节序(Little-Endian)之间的转换。

    java String 与各种进制字符之间的转换

    - `ByteBuffer`类提供了将字节数组与各种类型(包括整数和字符串)之间转换的功能。例如,`ByteBuffer.wrap(byte[])`可以创建一个缓冲区,然后使用`get()`和`put()`方法读写整数。 6. **HickeyTest.java**: 这个...

    ByteBuffer.zip

    - 写入数据:使用ByteBuffer的put方法将转换后的字节序列写入缓冲区,可以按单个字节、短整型、整型、长整型或其他自定义字节数组进行写入。 - 对齐处理:如果需要,可以进行字节对齐,确保数据按照特定的边界对齐...

    Java中byte、byte数组与int、long的转换详解

    在Java编程语言中,数据类型之间转换是常见的操作,特别是在处理二进制数据时。本文主要探讨了如何在`byte`、`byte`数组、`int`和`long`之间进行转换。以下是对这些转换方法的详细解释: 1. **Java中byte和int之间...

    protobuf+long+bytebuffer

    从网络或者存储中获取到protobuf编码的二进制数据后,可以创建一个`ByteBuffer`实例,然后调用protobuf编译器生成的类的解析方法,传入`ByteBuffer`实例进行解码。`ByteBuffer`会根据protobuf编码规则正确地读取和...

    Java NIO学习笔记——ByteBuffer用法

    本文主要关注的是Java NIO中的ByteBuffer,一个关键的数据容器,用于在通道(Channel)和缓冲区(Buffer)之间传输数据。ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。...

    在Java中int和byte[]的相互转换

    在Java编程语言中,有时我们需要将整型(int)数据与字节数组(byte[])之间进行转换,这在处理网络通信、序列化或存储数据时尤为常见。本文将深入探讨Java中int与byte[]的转换方法。 首先,让我们理解为什么需要进行...

    将传进来的十六进制表示的字符串转换成byte数组 文件下载

    本话题主要涉及将十六进制表示的字符串转换成byte数组。在Java、C#、Python等编程语言中,这样的转换都有其特定的方法。十六进制是一种二进制计数系统的表现形式,通常用于表示内存地址、颜色代码或二进制数据。而...

    Android在JNI中使用ByteBuffer的方法

    例如,从ByteBuffer读取数据到byte数组: ```java byte[] bytearray = new byte[buf.remaining()]; buf.get(bytearray, 0, bytearray.length); ``` 4. 对于直接ByteBuffer,它可以更高效地与JNI交互,因为数据...

    深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

    本篇将深入探讨Java NIO(非阻塞I/O)中的ByteBuffer和Mina库自定义的ByteBuffer之间的区别。 Java NIO的ByteBuffer是Java标准库提供的一个核心类,它是通道(Channel)和缓冲区(Buffer)之间数据传输的主要媒介。它...

    字节数组流byte文件

    不过,通常的处理流程是将这些二进制数据读取到内存中,形成一个字节数组流(byte[]),然后可以利用各种库如nodejs中的Buffer类或Java中的ByteBuffer类来对这些数据进行读取、写入和转换。 在技术实现上,如果我们...

    NIO(byteBuffer)按行读取文件

    使用nio byteBuffer 实现按行读取文件(大文件) 在window/linux/macOS上均测试通过 对于中文乱码也已处理成功 完整注释,可随需求更改 有问题请邮件:mly610865580@126.com

    byte-buffer:JavaScript的ArrayBufferDataView的包装器可简化读写操作

    import ByteBuffer from 'byte-buffer' ; const b = new ByteBuffer ( ) ; 在CommonJS环境中: const ByteBuffer = require ( 'byte-buffer' ) ; const b = new ByteBuffer ( ) ; 当包含在浏览器环境中

    java转换C生产dat文件

    3. **类型转换问题**:C语言允许直接操作指针,从而可以轻松地在不同类型之间转换,但Java需要通过特定的方法来实现这种转换。 #### 解决方案 为了解决上述问题,我们需要确保Java程序能够正确地识别和转换C语言...

    【IT十八掌徐培成】Java基础第26天-05.ByteBuffer-mark-pos-limit-cap-flip.zip

    - **get(int index)** 和 **put(int index, byte b)**:允许在指定位置读取或写入字节。 了解并熟练掌握`ByteBuffer`的这些特性与操作,对于开发高效、低延迟的Java应用程序,尤其是在处理大数据流和并发I/O时,...

    数组的转换函数

    上述代码片段提供了一些在Java中实现整型数(long类型)与网络字节序的字节数组之间转换的方法。以下是这些方法的详细说明: 1. `longToBytes(long n)`:这个静态方法将一个长整型(long)数值`n`转换为一个8字节的...

Global site tag (gtag.js) - Google Analytics