我正处于从文件中读取某些数据作为字节流的过程中,并且刚刚遇到了一些不确定如何处理的unicode字符串。
每个字符使用两个字节,只有第一个看起来包含实际数据,因此,例如,字符串“ trust”在文件中的存储方式为:
0x74 0x00(t) 0x72 0x00(r) ...and so on
通常,我只使用正则表达式将零替换为零,从而删除空格。但是,文件中单词之间的空格是使用来实现的0x00 0x00
,因此尝试执行一个简单的String’replaceAll’会使它有点混乱。
我曾尝试过使用String编码集,例如“ ISO-8859-1”和“ UTF-8 / 16”,但是每次我都以空白结束时。
我确实创建了一个简单的正则表达式来删除双零十六进制值,即:
new String(bytes).replaceAll("[\\00]{2,},"");
但这显然仅适用于双零,我真的很想用任何东西替换单零,并用实际的ASCII / Unicode空格字符替换双零。
我可能发誓,其中一种Java字符串格式设置处理了这种问题,但是我可能错了。因此,我应该创建一个正则表达式来去除零吗,还是Java确实提供了实现它的机制?
谢谢
那是"UTF-16LE"
。0x00 0x00
实际上会以UTF-16编码NUL字符,这就是您所得到的。
这种编码可以编码大约一百万个不同的字符,每个字符使用2或4个字节。前256个字符与第二个字节一起编码,0x00
如果文本仅包含那些字符,则可以将其视为无用的,但其余字符则需要它。例如,欧元货币符号€
将显示为0xAC 0x20
。
问题内容: 因此,在昨天的工作中,我不得不编写一个应用程序来计算AFP文件中的页数。因此,我整理了我的MO:DCA规范PDF,找到了结构化字段及其3个字节的标识符。该应用程序需要在AIX机器上运行,所以我决定用Java编写它。 为了获得最大效率,我决定读取每个结构化字段的前6个字节,然后跳过该字段中的其余字节。这会让我: 因此,我检查字段类型,如果是,则增加页面计数器,如果不是,则不增加。然后,我
问题内容: 我遇到了一些有关JVM / JIT活动的参考,其中似乎在编译字节码和解释字节码之间有区别。该特定注释声明的字节码在前10000次运行时进行解释,然后进行编译。 “编译”和“解释”字节码之间有什么区别? 问题答案: 解释字节码基本上是逐行读取字节码,不进行任何优化或任何操作,然后对其进行解析并实时执行。由于许多原因,这种方法效率低下,其中包括Java字节码设计得不能快速解释的问题。 编译
为什么第一个成功而第二个失败?人们可能期望它们产生相同的输出。
问题内容: 我经常卡在没有源的Java类文件中,并且试图理解我手头的问题。 请注意,反编译器是有用的,但在所有情况下都不足够… 我有两个问题 有哪些工具可用来查看Java字节码(最好从linux命令行中获得) 什么是熟悉Java字节码语法的良好参考 问题答案: 与其直接查看Java字节码(需要熟悉Java虚拟机及其操作),不如尝试使用Java反编译实用程序。反编译器将尝试从指定文件创建源文件。 该
本文向大家介绍详解python字节码,包括了详解python字节码的使用技巧和注意事项,需要的朋友参考一下 Python对不可变序列进行重复拼接操作效率会很低,因为每次都会生成一个新的对象,解释器需要把原来对象中的元素先复制到新的对象里,然后再追加新的元素。 但是CPython对字符串操作进行了优化,因为对字符串做+=操作实在是太普遍了。因此,初始化str时会预留出额外的可扩展空间,从而进行增量操
问题内容: 是否可以从由类源代码形成的字节码中提取出一个类名? 情况是这样的:我从某个地方远程获得了一个字节码类,不管它来自何处。为了使用类加载器有效地加载该类,我还需要具有类名称…对吗? 问题答案: 如果只需要类名,则可能自己解析类文件的开头,而不是仅仅为此目的而添加用于处理类代码的第三方库。您只需要常量池中的类和字符串,跳过访问标志,然后将/替换为即可。在班级名称中。如果有字节数组,则可以使用