我如何将 Long 转换为 byte[] 并返回到 java [英] How do I convert Long to byte[] and back in java

查看:36
本文介绍了我如何将 Long 转换为 byte[] 并返回到 java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在 Java 中将 long 转换为 byte[] 并返回?

How do I convert a long to a byte[] and back in Java?

我正在尝试将 long 转换为 byte[] 以便我能够通过TCP 连接.另一方面,我想将该 byte[] 转换回 double.

I'm trying convert a long to a byte[] so that I will be able to send the byte[] over a TCP connection. On the other side I want to take that byte[] and convert it back into a double.

推荐答案

public byte[] longToBytes(long x) {
    ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
    buffer.putLong(x);
    return buffer.array();
}

public long bytesToLong(byte[] bytes) {
    ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
    buffer.put(bytes);
    buffer.flip();//need flip 
    return buffer.getLong();
}

或者包裹在一个类中,避免重复创建ByteBuffers:

Or wrapped in a class to avoid repeatedly creating ByteBuffers:

public class ByteUtils {
    private static ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);    

    public static byte[] longToBytes(long x) {
        buffer.putLong(0, x);
        return buffer.array();
    }

    public static long bytesToLong(byte[] bytes) {
        buffer.put(bytes, 0, bytes.length);
        buffer.flip();//need flip 
        return buffer.getLong();
    }
}

<小时>

由于它变得如此流行,我只想提一下,我认为在绝大多数情况下,您最好使用像 Guava 这样的库.如果您对库有一些奇怪的反对意见,您可能应该首先考虑 这个答案 对于原生 Java 解决方案.我认为我的回答真正的主要目的是您不必自己担心系统的字节序.


Since this is getting so popular, I just want to mention that I think you're better off using a library like Guava in the vast majority of cases. And if you have some strange opposition to libraries, you should probably consider this answer first for native java solutions. I think the main thing my answer really has going for it is that you don't have to worry about the endian-ness of the system yourself.

这篇关于我如何将 Long 转换为 byte[] 并返回到 java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆