java - 一些 ASCII 字符可以中断/结束 Java 中的任何字符串/数组/流吗?

标签 java string char compression ascii

我目前正在开发一个小程序,该程序通过用对下一个出现的引用替换重复的单词/短语来压缩文本 - 从而将字符串压缩为更短的字符串,没有元数据或数组或实际压缩中使用的任何技术。我的引用文献在某种意义上存储为字符对:

(char)7 + (char)(length << 4 + offset)

其中(char)7只是一个任意选择的字符,用于表示压缩引用。 length 和 offset 都是全范围字节变量,指的是将被替换的字数以及直到下一次出现的偏移量。 (我与这个问题无关,但我通过手动无符号<->有符号转换将它们视为无符号字节。)

//Example compression would result like this:
String input = "compression and compression";
String output = (char)7 + (char)18 + " and compression"
//(char)18 - binary 0001 0010 would be saying 1 word repeat, from 2 words ahead.

TL;DR:,恐怕在特殊情况下可能会将我的自定义字符解释为特殊的 ASCII 字符。我知道java中的字符串会忽略 \0 字符( Due to this question )。但是还有其他 java 方法/类可能会导致问题吗?假设我要使用流、缓冲区、读取器、字符数组等发送/转换压缩字符串?

最佳答案

String 保存 Unicode 符号,称为代码点char 有 2 个字节,采用 UTF-16(一种特殊格式)。特别是有 2 个字符的代理对来表示 2 字节范围以上(即 216 以上)的代码点。

除了使用char之外,您还可以在代码点中完成所有操作,在java中代码点的类型为int。然而,合法的 Unicode 是有上限的。

但是,只要您不转换为某些编码中的字节,您就可以逃脱您的编码。 才是真正的问题。

由于没有干净的解决方案,byte[]ByteArrayOutputStreamByteBuffer(使用 putShort 等)可能会更干净。

关于java - 一些 ASCII 字符可以中断/结束 Java 中的任何字符串/数组/流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38480325/

相关文章:

Java-如何剥离字符串中的单个字符并将它们存储在一维数组中?

C++:如何构建字符串/字符*

将 char 数组从读取文件转换为 double

java - 当我需要知道对象何时指向 null 时如何处理 NullPointerException? java

java - 使用 RSE 通过 Eclipse 将远程源作为 Java 项目 check out

java - 谁能告诉我这段代码出了什么问题?

java - 将字符串从字符串数组转换为整数

java - 如何将文本文件作为字符串读取并仅提取单个字符? "0"

java - WebDriver 测试未在 IE11 上运行

PHP 从字符串中解析日期