在编程的上下文中,“offset”是什么意思?
它是指开头还是距离?
String.offsetByCodePoints(int index, int codePointOffset)
方法是做什么用的?方法文档中的“不成对代理项”是什么意思?
在编程的上下文中,“offset”是什么意思?
它是指开头还是距离?
String.offsetByCodePoints(int index, int codePointOffset)
方法是做什么用的?方法文档中的“不成对代理项”是什么意思?
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 字符串进行一些背景阅读。
举个维基百科的例子,假设你有一个字符串 "abcdef",那么从字符 'a' 开始,'d' 字符将具有偏移量为 3。
String.offsetByCodePoints(int index, int 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
它是到达您想要到达的地址的“行程”距离。
根据维基百科 偏移量(计算机科学)
数组或其他数据结构对象中的偏移量是指从对象开头到给定元素或点之间的距离(位移)。只有当对象的所有元素大小相同时,距离的概念才有效(通常以字节或字为单位给出)。
获取文件位置
您可以使用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()方法返回实际读取的字节数。