gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:28:16 26 4
gpt4 key购买 nike

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

(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com