在 java 中,`fileinputstream` 的 `skip(long n)` 方法用于跳过输入流中的指定字节数。调用该方法后,流的内部指针会向后移动,后续读取的数据将从跳过后的位置开始。需要注意的是,`skip` 的实际跳过字节数可能小于请求的数量,因此必须检查其返回值来确定实际跳过的字节数。

如何正确实现可靠跳过
直接调用 `skip` 并不保证能跳过所有请求的字节,因为底层系统或文件类型可能导致跳过数量不足。为了确保精确跳过 N 个字节,需要在一个循环中反复调用 `skip`,直到累计跳过的字节数达到目标值,或者到达文件末尾。

import java.io.FileInputStream;
import java.io.IOException;
public class ReliableSkip {
public static void main(String[] args) throws IOException {
// 假设有一个包含 "0123456789" 的文件
try (FileInputStream fis = new FileInputStream("test.txt")) {
long bytesToSkip = 5;
long totalSkipped = 0;
while (totalSkipped <h2>skip 返回值的含义与边界情况</h2><p>`skip` 方法的返回值表示实际跳过的字节数。如果请求跳过的字节数大于剩余可用字节数,它将跳过尽可能多的字节并返回实际跳过的数量。如果流已经到达文件末尾,`skip` 将返回 0。在处理网络流或某些特殊文件时,这种行为尤为重要,开发者必须根据返回值调整逻辑,而不是假设跳过操作总是成功的。</p><p><img src="https://img.php.cn/upload/article/001/242/473/179438635881095.png?x-oss-process=image/resize,p_40" alt="Java 字节流与字符流中 FileInputStream 中 skip 怎么使用"></p><pre class="brush:php;toolbar:false;">import java.io.FileInputStream;
import java.io.IOException;
public class SkipBoundaryCheck {
public static void main(String[] args) throws IOException {
try (FileInputStream fis = new FileInputStream("small.txt")) { // 假设文件只有 2 字节
long request = 10;
long actual = fis.skip(request);
System.out.println("Requested: " + request + ", Actual: " + actual);
// 输出: Requested: 10, Actual: 2
// 尝试再次跳过,此时应返回 0
long secondSkip = fis.skip(1);
System.out.println("Second skip result: " + secondSkip); // 输出 0
}
}
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











