”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 Java 中将 Long 值转换为字节数组并返回?

如何在 Java 中将 Long 值转换为字节数组并返回?

发布于2024-11-08
浏览:898

How to Convert a Long Value to a Byte Array and Back in Java?

在 Java 中将 Long 转换为字节数组并返回

在 Java 中,将 long 基本数据类型转换为字节数组 (byte[] ),反之亦然是各种操作的常见任务,例如通过 TCP 连接发送数据。下面是实现此转换的全面解决方案:

Long 到 Byte Array

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

此方法使用 ByteBuffer 类创建大小为 Long.BYTES 的缓冲区,这是表示 long 值所需的字节数。 putLong()方法用于将long值写入缓冲区,array()方法返回表示long的底层字节数组。

Byte Array to Long

public long bytesToLong(byte[] bytes) {
    ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
    buffer.put(bytes);
    buffer.flip(); // Flip the buffer to prepare for reading
    return buffer.getLong();
}

要将字节数组转换回 long,将创建一个新的 ByteBuffer 并加载给定的字节数组。 Flip() 方法用于使缓冲区准备好读取。最后,getLong()方法从缓冲区中读取long值。

封装在Helper类中

为了方便,可以将转换方法封装在一个实用程序中类:

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(); // Flip the buffer to prepare for reading
        return buffer.getLong();
    }
}

此实用程序类提供了一种执行转换的简单方法,而无需每次都创建和管理 ByteBuffer 实例。

Endianness 注意事项

注意ByteBuffer 类使用系统的本机字节序。如果需要跨平台兼容性,则可能需要额外考虑处理字节序。

替代解决方案:使用库

虽然上面提供的本机 Java 解决方案已经足够,在某些情况下它们可能会变得乏味。对于复杂或扩展的数据转换需求,请考虑使用 Guava 或 Apache Commons 等库,它们提供更全面、更高效的解决方案。

最新教程 更多>
  • 利用剩余参数
    利用剩余参数
    我今天浏览了node.js材料,并使用了path.join方法。该方法在node.js中被广泛使用。 path.join("/foo", "bar"); // Returns: '/foo/bar' path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')...
    编程 发布于2024-11-08
  • 如何从导入的 CSV 文件中删除 BOM?
    如何从导入的 CSV 文件中删除 BOM?
    从导入的 CSV 文件中删除 BOM导入 .csv 文件时,经常会遇到 BOM(字节顺序标记),它可能会干扰数据处理。可以通过从文件中删除 BOM 来解决此问题。删除 BOM 的一种方法是使用正则表达式:$new_file = preg_replace('/[\x00-\x1F\x80-\xFF]/...
    编程 发布于2024-11-08
  • ## 为什么模板基类的多重继承会导致成员函数解析不明确?
    ## 为什么模板基类的多重继承会导致成员函数解析不明确?
    消除多重继承的歧义使用模板基类处理多重继承时,会出现关于不明确成员函数解析的潜在问题。考虑以下场景:template <typename ... Types> class Base { public: template <typename T> typename st...
    编程 发布于2024-11-08
  • 如何向字典条目等类添加动态属性?
    如何向字典条目等类添加动态属性?
    向类添加动态属性在使用模拟类模拟数据库结果集的过程中,出现了一个挑战:如何分配动态属性实例的属性类似于字典的属性。这涉及创建行为类似于具有特定值的属性的属性。最初,一种有前景的方法涉及使用以下方式分配属性:setattr(self, k, property(lambda x: vs[i], self...
    编程 发布于2024-11-08
  • 使用failsafe-go 库实现微服务之间通信的弹性
    使用failsafe-go 库实现微服务之间通信的弹性
    Let's start at the beginning. What is resilience? I like the definition in this post: The intrinsic ability of a system to adjust its functioning prio...
    编程 发布于2024-11-08
  • 系统集成测试:确保无缝软件集成
    系统集成测试:确保无缝软件集成
    在软件开发的动态环境中,确保系统的各个组件或模块无缝地协同工作对于提供可靠且高性能的软件解决方案至关重要。这篇博文深入探讨了系统集成测试 (SIT),这是软件测试生命周期中的一个关键阶段,用于验证集成组件之间的交互,确保系统的整体功能和可靠性。 什么是系统集成测试? 系统集成测试 (SIT) 是软...
    编程 发布于2024-11-08
  • 事件冒泡和捕获 - 像 5 岁一样学习
    事件冒泡和捕获 - 像 5 岁一样学习
    来吧,“像五岁一样学习”只是一个短语——我不是在这里讲一个玩具故事!但我保证,如果你从头到尾仔细阅读,一切都会有意义。 事件冒泡和捕获是在 JavaScript 中触发事件时事件如何通过 DOM(文档对象模型)传播(或传播)的两个阶段。现在,这个说法需要澄清事件传播的概念。 事件传播...
    编程 发布于2024-11-08
  • 如何将变量从一个页面发送到另一个 flutter/dart
    如何将变量从一个页面发送到另一个 flutter/dart
    您好,我目前正在尝试在连接步骤期间将用户的变量条目传递到我的应用程序的主页,但我遇到错误,我不知道是什么原因导致的,在我的页面 main (gamepage) 中,在男孩的孩子中,我想显示控制器的地址,但是 flutter 告诉我这个变量没有定义!!! 你是我唯一的希望 import 'dart:c...
    编程 发布于2024-11-08
  • 如何在 HTML 中使用 PHP?
    如何在 HTML 中使用 PHP?
    要在 HTML 中使用 PHP,必须用 PHP 开始标记 . 在本文中,我们将通过示例学习如何在 HTML 中使用 PHP。 PHP(超文本预处理器) 是一种用于 Web 开发的流行服务器端脚本语言。它允许您将动态内容嵌入到您的HTML。 在 HTML 中使用 PHP 的方法 要在 HTML 中有效...
    编程 发布于2024-11-08
  • 使用 LangSmith Hub 改变您的工作流程:JavaScript 工程师的游戏规则改变者
    使用 LangSmith Hub 改变您的工作流程:JavaScript 工程师的游戏规则改变者
    分散的人工智能提示是否会减慢您的开发进程?了解 LangChain Hub 如何彻底改变您的工作流程,为 JavaScript 工程师提供无缝且高效的即时管理。 介绍 想象一下管理一个项目,其中关键信息分散在文件中。令人沮丧,对吧?这就是处理 AI 提示的开发人员面临的现实。 Lan...
    编程 发布于2024-11-08
  • 如何在 PHP 中将数值转换为字符串表示形式?
    如何在 PHP 中将数值转换为字符串表示形式?
    将数值转换为 PHP 中的字符串表示形式将数值转换为 PHP 中相应的字符串版本是一项常见任务,尤其是在工作时与文本处理或面向用户的应用程序。当处理特定范围内的值时,这种转换变得尤其重要,例如将数字从 1 到 99 转换为其等效文本。要执行此转换,我们可以利用 PEAR 包 Numbers_Word...
    编程 发布于2024-11-08
  • 如何在 Bigquery 参数化查询中传递结构数组
    如何在 Bigquery 参数化查询中传递结构数组
    在Google的Bigquery中,SQL查询可以参数化。如果您不熟悉这个概念,它基本上意味着您可以将 SQL 查询编写为参数化模板,如下所示: INSERT INTO mydataset.mytable(columnA, columnB) VALUES (@valueA, @valueB)...
    编程 发布于2024-11-08
  • 如何使用 Python“for”循环实现 C/C++ 风格循环?
    如何使用 Python“for”循环实现 C/C++ 风格循环?
    在 Python 中实现 C/C 风格循环:“for”循环在 Python 中,循环提供了一种用于迭代序列的通用机制。虽然 Python 的“for”循环语法与其 C/C 对应部分不同,但实现类似的功能仍然是可行的。考虑 C/C 中的以下循环:for(int k = 1; k <= c; k ...
    编程 发布于2024-11-08
  • Laravel 入门:查询生成器初学者指南
    Laravel 入门:查询生成器初学者指南
    Laravel 的 查询生成器 提供了一个强大、流畅的界面,用于在 PHP 中构建 SQL 查询。它允许您以富有表现力的、类似 SQL 的语法与数据库交互,同时抽象出大部分复杂性。 我们将演练 Laravel 应用程序中的典型用例,使用查询生成器执行各种任务,例如选择、插入、更新和删除数据。 ...
    编程 发布于2024-11-08
  • 如何截断长分页列表以增强用户体验?
    如何截断长分页列表以增强用户体验?
    截断长页面列表以实现高效分页分页是任何显示大量数据的网站或应用程序的重要组成部分,因为它允许用户以可管理的块的方式浏览它。但是,如果以简单的方式实现,分页可能会导致页面列表过长,特别是当应用于具有大量页面的数据集时。为了缓解此问题,有必要截断这些页面列表为用户提供更简洁的导航选项。在本文中,我们将深...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3