【问题标题】:What does "offset" mean in the context of programming?在编程的上下文中“偏移”是什么意思?
【发布时间】:2011-04-27 15:52:38
【问题描述】:

在编程上下文中“偏移”是什么意思?

是指一开始还是一段距离?

String.offsetByCodePoints(int index, int codePointOffset) 方法有什么作用?方法文档中的“未配对代理”是什么意思?

【问题讨论】:

标签: java string offset


【解决方案1】:

根据JavaDoc,

String.offsetByCodePoints(int index, int codePointOffset)

返回此对象内的索引 从 {@code index} 偏移 {@code codePointOffset} 个代码点。

这是一个使用示例...

int num = 0;
num = "Test_String".offsetByCodePoints(0, 2); //num is 2
num = "Test_String".offsetByCodePoints(3, 2); //num is 5
num = "Test_String".offsetByCodePoints(9, 5); //Throws an exception since offset goes out-of-bounds

【讨论】:

  • num = "Test_String".offsetByCodePoints(3, 2); //num is 6 为我打印 5
  • 抱歉,"off by 1" 错字。现已修复。
【解决方案2】:

一个来自维基百科的例子,假设你有一个字符串“abcdef”,“d”字符将从字符“a”开始偏移三个。

Offset (computer science)

【讨论】:

  • 所以,偏移量基本上只是“填充”?
【解决方案3】:

在编程上下文中“偏移”是什么意思?是一开始的意思还是远处的意思?

一般来说,“偏移”是指从某个给定位置测量的某种形式的距离。该位置可能是……某事……的开始,但不一定。

“偏移”的具体含义取决于使用它的上下文。 (理想情况下,含义将明显从上下文中。)


String.offsetByCodePoints(int index, int codePointOffset) 方法有什么作用?

此方法计算特定charString 中的位置。 char 将是index 给出的位置之后的codePointOffset 代码点的Unicode 代码点的第一个字符。

(因此,在此上下文中,“偏移量”是指以 Unicode 代码点测量的距离给定代码单元位置的距离。)

index 和结果都是正常的字符串索引值;即他们是char 职位。

要点...当您将String 视为Unicode 代码点序列时,您的代码需要考虑到代码点可能包含1 个或2 个char 值这一事实。

要了解以上所有内容的含义,您可能需要对 Unicode、代码点和代码单元以及 UTF-16 以及 Java 如何建模 Unicode 字符串进行一些背景阅读。


方法文档中的“未配对代理”是什么意思?

Java 字符串将 Unicode 代码点 > 65535 的字符表示为 UTF-16 代理字符。在格式良好的 UTF-16 字符串中,代理项成对出现,分别代表 Unicode 代码点的高位和低位。

这句话的意思是,如果String 包含未正确配对的代理项,它将把它们视为单独的代码点......为了计算代码点。

另请参阅:What is a "surrogate pair" in Java?

【讨论】:

    【解决方案4】:

    根据维基百科Offset (computer science)

    数组或其他数据结构对象内的偏移量是一个整数,表示对象开始与给定元素或点之间的距离(位移),可能在同一对象内。只有当对象的所有元素都具有相同的大小(通常以字节或字为单位)时,距离的概念才有效。

    获取文件位置

    您可以使用 Java RandomAccessFile 的 getFilePointer() 方法获取其当前位置。当前位置是 RandomAccessFile 当前所在字节的索引(offset)。下面是一个使用 RandomAccessFile 的 getFilePointer() 方法获取当前位置的示例:

    例如,我们以java中RandomAccessFile中的Offest为例:

    RandomAccessFile randomAccessFile = new RandomAccessFile("data/data.txt", "r");
    
     byte[] dest      = new byte[1024];
     int    offset    = 0;
     int    length    = 1024;
     int    bytesRead = randomAccessFile.read(dest, offset, length);
    

    此示例将字节序列读取到作为参数传递给 read() 方法的 dest 字节数组中。 read() 方法将从 RandomAccessFile 的当前文件位置开始读取文件。 read() 方法将从 offset 参数 提供的数组位置开始向字节数组写入数据,最多为 length 参数提供的字节数。这个 read() 方法返回实际读取的字节数。

    【讨论】:

      【解决方案5】:

      这是“旅行”到您希望到达的地址的距离。

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2013-04-07
      • 2015-10-18
      • 2022-01-08
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多