我正在尝试在文件开头的3个短片中读取.csv文件。我需要阅读它们并且我设置了一个变量,但似乎没有提取正确的数据。
private short M = 0;
private short rootPtr = 0;
private short N = 0;
RandomAccessFile file;
private short[] TP; // array of TPs for one node
private String[] KV; // array of KVs for one node
private short[] DRP; // array of DRPs for one node
private int nodesRead; // iterator for nodes read
private int sizeOfDataRec; // stores size of data record: (M - 1) * (7) + 2
// sets values from header record
file.seek(0);
M = file.readShort();
rootPtr = file.readShort();
N = file.readShort();
sizeOfDataRec = (M - 1) * (7) + 2; // sets size of data record
TP = new short[M];
KV = new String[M - 1];
DRP = new short[M - 1];
文件的前三个短片应该是05,11,22但是当我在这个位的末尾打印出M时我得到了12344
答案 0 :(得分:1)
CSV文件是文本。它不包含短片,您不能期望在其上使用RandomAccessFile.readShort()
。更有可能的是你应该使用Scanner.nextShort()
等。
答案 1 :(得分:1)
从此文件中读取已签名的16位数字。该方法读取两个 此文件中的字节,从当前文件指针开始。如果是两个 按顺序读取的字节是b1和b2,其中两个值中的每一个都是 在0到255之间(含),结果等于:
(短)((b1 <&lt; 8)| b2)
此方法阻塞,直到读取两个字节,即流的结尾 被检测到,或者抛出异常
现在让我们看看你的案例中发生了什么,假设你正在阅读的第一个短值是05
当 readShort 读取两个字节时,它将读取0为48,将5读为53(记住ASCII码),然后将上述公式应用于其中
(48 << 8) | 53 = 12288 + 53 = 12341
所以你在短变量中看到了这些值。
您应按照EJP
的建议使用Scanner#nextShort