如何将带有 null 终止字符的字节数组转换为 Java 中的字符串?

2024-01-10

如何从字节数组创建 String 对象

byte arr[MAX_SIZE];  // Java

其中数组元素之一是 C 空终止字节?是不是像打电话那么简单

String str = new String( arr );

String 构造函数是否知道自动停止在空终止字符处?空字节之后的任何字节(可能)都是我不想包含在字符串中的垃圾字符。最后的回复如下解析包含未知长度字段的字节数组 https://stackoverflow.com/questions/5106531/parsing-byte-array-in-java建议循环遍历数组并手动查找空终止字符,但我想知道 String 构造函数是否会自动执行此操作。我还假设系统的默认字符集将在所有端使用。


byte arr[] = ...
Charset charset = ...

// Find the position of the first zero byte
int i;
for (i = 0; i < arr.length && arr[i] != 0; i++) { }


String str = new String(arr, 0, i, charSet);

Notes:

  • 使用显式 CharSet 参数通常是一个好主意,这样您的应用程序就不会依赖于平台的默认字符集/编码。

  • 这对于某些字符集不起作用。例如,UTF-16 编码的字符串不能安全地表示为以零结尾的字节序列,因为许多代码单元包含零字节。 (另一方面,只要字符串不包含代码点零的实例,UTF-8 就可以;请参阅UTF-8 可以包含零字节吗? https://stackoverflow.com/questions/6907297/can-utf-8-contain-zero-byte)

...但我想知道 String 构造函数是否会自动执行此操作。

不,他们不会。 (不要“想知道”......阅读 javadoc :-))

我还假设系统的默认字符集将在所有端使用。

如果不指定字符集,将使用 Java 平台的默认字符集。这很可能是system默认,但不能保证这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将带有 null 终止字符的字节数组转换为 Java 中的字符串? 的相关文章

  • Android 自定义视图不能以正确的方式处理透明度/alpha

    我正在绘制自定义视图 在此视图中 我使用两个不同的绘画和路径对象在画布上绘画 我基本上是在绘制两个重叠的形状 添加 Alpha 后 视图中重叠的部分比图像的其余部分更暗 这是不希望的 但我不知道如何解决它 这是我的代码片段 用于展示我如何在
  • C# 是否有像 Java 那样的字符串分词器?

    我正在做简单的字符串输入解析 我需要一个字符串标记器 我是 C 新手 但已经编写过 Java 程序 因此 C 应该有一个字符串标记生成器似乎很自然 可以 它在哪里 我该如何使用它 你可以使用String Split 方法 http msdn
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • 在 HTTP 标头中发送 UTF-8 值会导致 Mojibake

    我想使用 servlet 发送阿拉伯语数据HTTPServletResponse给客户 我正在尝试这个 response setCharacterEncoding UTF 8 response setHeader Info arabicWo
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 列表应该如何转换为具体的实现?

    假设我正在使用一个我不知道源代码的库 它有一个返回列表的方法 如下所示 public List
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop

随机推荐

  • 限制 UITextView 中的行数

    我很清楚有人问过这个问题 但我找不到有效的答案 使用先前解决方案的组合 我想出了以下代码 BOOL textView UITextView textView shouldChangeTextInRange NSRange range rep
  • Google App Engine 上的 CloudSQL PDO(unix_socket) 问题

    我正在尝试从 App Engine 连接到我的 CloudSQL 实例 我的设置方法是使用静态 IP 我可以使用它从 App Engine 外部 即在我的开发环境中 连接到它 但是 当应用程序在 GAE 中运行时 连接到数据库的唯一方法是使
  • 如何在 Matplotlib 中使用带有形状内文本的自定义标记?

    背景 在 Matplotlib 中 我们可以使用 mathtext 作为标记来渲染字符串 参考文献1 https matplotlib org 3 2 1 api markers api html Question 有什么方法可以将此文本封
  • UP3(jawbone)如何实时检索睡眠值

    我正在尝试实时检索我的睡眠数据 我无法从文档中找到如何实现它 UP平台Android SDK https github com Jawbone UPPlatform Android SDK 附 我愿意进行睡眠实验 需要在我到达时获取一个事件
  • Java EE / J2EE 与 J2SE / JDK 版本之间的关联

    我确信我会找到重复的问题或令人满意的答案 但我没有 我正在寻找的是这些问题的答案 Java EE J2EE 和 J2SE JDK 版本之间是否有官方关联 如果答案是肯定的 那么它写在哪里 如果答案是否定的 那为什么呢 是否有非官方版本表 例
  • Javascript原生排序方法代码

    知道如何查看本机 javascript 方法的实现 特别是排序 方法 我之所以寻找这个 我只是想知道所使用的算法是什么以及其复杂性是什么 我正在 javascript 中对一个巨大的 json 对象进行排序 我想知道我是否应该为此编写自己的
  • 有没有办法让 JSF 与通用 setter 和 getter 一起使用

    有没有办法让 JSF 与通用实体一起工作 如下所述 属性 java public interface MyProperty
  • 如何将我的所有函数打包在批处理文件中作为单独的文件?

    我的问题与this https stackoverflow com questions 10149194 something like a function method in batch files问题 我有几个需要从批处理文件执行的操作
  • 如何转换pandas中日期时间列的时区,然后删除时区?

    我有一个列 非索引列 其中包含日期时间 例如 前五个条目如下所示 Timestamp 2018 11 15 19 57 55 Timestamp 2018 11 15 19 59 46 Timestamp 2018 11 15 20 00
  • 如何将(声明)安全令牌传递给启用 WIF 的 WCF 服务

    我很想知道我们如何从已通过 WIF 启用的 WCF 服务身份验证的 WIF 应用程序发送安全令牌 任何帮助将不胜感激 答案并不简单 但以下步骤构成了 推荐模式 并记录在以下 MSDN 文章中 AD FS 2 0 身份委派分步指南 http
  • x86_64 调用约定和堆栈帧

    我试图理解 GCC 4 4 3 为 Ubuntu Linux 下运行的 x86 64 机器生成的可执行代码 特别是 我不明白代码如何跟踪堆栈帧 过去 在 32 位代码中 我习惯于在几乎每个函数中看到这个 序言 push ebp movl e
  • 从内部存储中删除文件

    我正在尝试删除存储在内部存储中的图像 到目前为止我已经想出了这个 File dir getFilesDir File file new File dir id jpg boolean deleted file delete 这是来自另一个问
  • 上限集合性能问题

    我正在做一些测试 看看我可以从 Mongodb 获得什么样的吞吐量 文档说上限集合是最快的选择 但我经常发现我可以更快地写入普通集合 根据具体的测试 我通常可以通过正常收集获得两倍的吞吐量 我错过了什么吗 我该如何解决这个问题 我有一个非常
  • 检索超过 7 天的特定用户的推文

    我正在尝试获取任何用户的推文 但它只返回最近 7 天的推文 我想检索比这更旧的推文 如何做 现在我正在通过以下方式获取推文 http search twitter com search atom q from 3Amihirpmehta h
  • bash:Python 导入 - 找不到 pandas 命令

    我是使用 MacBook 的 Python 初学者 我想进口pandas在我的 Python 脚本中 我输入以下命令 import pandas as pd 结果是 错误 bash 导入 找不到命令 问题 如何启用导入命令 我用了 usr
  • @Qualifier 的问题

    我正在 Java Spring 环境中工作 并且在让 Qualifier 工作时遇到问题 我们项目的其他部分正在使用 Inject 来获取一个 bean 但我需要有同一个 bean 的两个版本 看起来使用 Autowired 和 Quali
  • 如何使用 Java 解析此 XML?

  • Telnet smtp.mail - 必须首先发出 STARTTLS 命令

    在我的 Mac 终端上 我试图telnet进入我的smtp gmail com通过port 587 在 Google Apps 设置为管理 Dreamhost 域 上 我配置了中继 如下所示 Allowed senders Only add
  • bash:提取路径名的最后两个目录

    我似乎在 bash 中失败了一些非常简单的事情 我有一个字符串变量 它保存目录的完整路径 我想分配最后一个two将其中的目录转换为另一个字符串 例如 如果我有 DIRNAME a b c d e 我想要 DIRNAME2 d e 我确信有一
  • 如何将带有 null 终止字符的字节数组转换为 Java 中的字符串?

    如何从字节数组创建 String 对象 byte arr MAX SIZE Java 其中数组元素之一是 C 空终止字节 是不是像打电话那么简单 String str new String arr String 构造函数是否知道自动停止在空