【问题标题】:Skip() method in IO java?IO java中的Skip()方法?
【发布时间】:2015-09-29 08:54:49
【问题描述】:

我知道FileInputStreamskip(long) 方法从文件的起始位置跳过字节并放置文件指针。但是如果我们只想跳过文件中间的20个字符,而文件的其余部分要被读取,我们应该怎么做呢?

【问题讨论】:

  • skip 从当前文件位置开始工作。对于文本,请使用阅读器(InputStreamReader 将二进制字节桥接到 Unicode java 文本)。对于缓冲,请使用 Buffered~ 版本。

标签: java io fileinputstream skip


【解决方案1】:

您应该使用BufferedReader。它的skip 方法跳过字符而不是字节。

从现有的FileInputStream 中跳过20 字符:

BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
// read what you want here
reader.skip(20);
// read the rest of the file after skipping

【讨论】:

  • @QuanNguyen - 作为一个经验法则,请记住 流处理字节,读取器/写入器处理字符
  • 请记住,如果您在 BMP 之外有字符,即使 BufferedReader.skip() 也不一定完全符合您的要求。
【解决方案2】:

维护一个计数器。

循环所有字符,每次读取都会增加计数器。当您达到与要跳过的字符开头对应的计数器限制时,跳过您需要跳过的字符。

int counter = 0;
while (counter < START_SKIP) {
    int x = input.read();
    // Do something
}
input.skip(NUM_CHARS_TO_SKIP);
...
// Continue reading the remainings chars

如有必要,请使用 BufferedReader 来提高 Tunaki 所说的性能(或 BufferedInputStream,具体取决于您正在阅读的文件类型,如果是二进制文件还是文本文件)。

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2015-04-08
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多