在编程的上下文中“偏移”是什么意思?
是一开始的意思还是远处的意思?
该String.offsetByCodePoints(int index, int codePointOffset)
方法有什么作用?方法文档中的“未配对代理”是什么意思?
在编程的上下文中“偏移”是什么意思?
是一开始的意思还是远处的意思?
该String.offsetByCodePoints(int index, int codePointOffset)
方法有什么作用?方法文档中的“未配对代理”是什么意思?
来自维基百科的示例,假设您有一个字符串“abcdef”,“d”字符将从字符“a”开始偏移三个。
在编程的上下文中“偏移”是什么意思?是一开始的意思还是远处的意思?
一般来说,“偏移”是指从某个给定位置测量的某种形式的距离。该位置可能是……某事……的开始,但不一定。
“偏移”的具体含义取决于使用它的上下文。(理想情况下,含义将从上下文中显而易见。)
该
String.offsetByCodePoints(int index, int codePointOffset)
方法有什么作用?
此方法计算特定char
在String
. 将char
是 Unicode 代码点的第一个字符,即.codePointOffset
给出的位置之后的代码点index
。
(因此,在这种情况下,“偏移量”是指以 Unicode 代码点测量的距离给定代码单元位置的距离。)
两者index
和结果都是正常的字符串索引值;即他们是char
职位。
重点......当您将 aString
视为 Unicode 代码点序列时,您的代码需要考虑到代码点可能由 1 个或 2 个char
值组成的事实。
要了解以上所有内容的含义,您可能需要阅读有关 Unicode、代码点和代码单元以及 UTF-16 以及 Java 如何对 Unicode 字符串建模的背景知识。
方法文档中的“未配对代理”是什么意思?
Java 字符串将 Unicode 代码点 > 65535 的字符表示为 UTF-16 代理字符。在格式良好的 UTF-16 字符串中,代理项成对出现,分别代表 Unicode 代码点的高位和低位。
这句话的意思是,如果 aString
包含未正确配对的代理项,它将把它们视为单独的代码点......为了计算代码点。
另请参阅:Java 中的“代理对”是什么?
根据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
这是“旅行”到您希望到达的地址的距离。
根据 Wikipedia Offset(计算机科学)
数组或其他数据结构对象内的偏移量是一个整数,表示对象开始与给定元素或点之间的距离(位移),可能在同一对象内。只有当对象的所有元素都具有相同的大小(通常以字节或字为单位)时,距离的概念才有效。
获取文件位置
您可以使用其 getFilePointer() 方法获取 Java RandomAccessFile 的当前位置。当前位置是 RandomAccessFile 当前所在字节的索引(偏移量)。下面是一个使用 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() 方法返回实际读取的字节数。