在编程领域中,“offset”是什么意思?

22

3
请问您的第一个问题是关于 http://en.wikipedia.org/wiki/Offset_%28computer_science%29 的内容吗?以下是翻译的文本: - jmj
1
http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates 的第二部分问题的解答是 - dsetton
你的问题主体并不符合标题,因为后面你询问了Java标准库中的一个方法。offset只是某个轴线上距离原点的距离,没有更多也没有更少。 - Curcuma_
5个回答

5
在编程的上下文中,“offset”是什么意思?它是指开头还是距离?
一般来说,“offset”表示从某个给定位置测量的某种形式的距离。该位置可以是某个东西的开始,但不一定是这样。
“offset”具体意味着什么将取决于它所用的上下文。(理想情况下,从上下文中可以明显看出意义。)

String.offsetByCodePoints(int index, int codePointOffset) 方法是做什么的?

该方法计算 String 中特定 char 的位置。该 char 是 Unicode 码点中比给定 index 位置后 codePointOffset 个码点的第一个字符。

(因此,在这个上下文中,“offset”指的是距离从给定代码单元位置以 Unicode 码点度量的距离。)

无论是 index 还是结果都是普通字符串索引值;即它们是 char 位置。

重点在于,当您将 String 视为 Unicode 码点序列时,您的代码需要考虑到一个码点可能由 1 或 2 个 char 值组成的事实。

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


方法文档中的“unpaired surrogates”是什么意思?
Java字符串将Unicode代码点>65535表示为UTF-16代理字符。在格式良好的UTF-16字符串中,代理以一对出现,分别表示Unicode代码点的高位和低位。
这句话的意思是,如果一个String包含未正确配对的代理,它将把它们视为单独的代码点...用于计算代码点。
另请参阅:Java中的“代理对”是什么?

3

举个维基百科的例子,假设你有一个字符串 "abcdef",那么从字符 'a' 开始,'d' 字符将具有偏移量为 3。

偏移量 (计算机科学)


所以,偏移量基本上就是“填充”吗? - paraJdox1

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 - jmj
抱歉,“off by 1” 打错了。现在已经修复。 - Ryan Berger

0

它是到达您想要到达的地址的“行程”距离。


1
目前你的回答不够清晰明了。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心中找到有关撰写好回答的更多信息。 - Community

-1

根据维基百科 偏移量(计算机科学)

数组或其他数据结构对象中的偏移量是指从对象开头到给定元素或点之间的距离(位移)。只有当对象的所有元素大小相同时,距离的概念才有效(通常以字节或字为单位给出)。

获取文件位置

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

例如,在Java中获取RandomAccessFile的偏移量:

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()方法返回实际读取的字节数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接