当前位置: 首页 > 面试题库 >

具有rewind()/ reset()功能的Java文件输入

尹弘壮
2023-03-14
问题内容

我需要编写一个接受某种输入流内容(例如InputStream或FileChannel)的函数,以便分两次读取大文件:一次是预先计算一些容量,第二次是进行“实际”工作。我不希望将整个文件立即加载到内存中(除非文件很小)。

是否有适当的Java类提供此功能? FileInputStream本身不支持mark()/
reset()。我认为BufferedInputStream确实可以,但是我不清楚它是否必须存储整个文件才能做到这一点。

C非常简单,您只需使用fseek(),ftell()和rewind()。:-(


问题答案:

我认为引用FileChannel的答案就在商标上。

这是封装此功能的输入流的示例实现。它使用委托,因此它不是真正的FileInputStream,但是它是InputStream,通常就足够了。如果需要的话,可以类似地扩展FileInputStream。

未经测试,使用后果自负:)

public class MarkableFileInputStream extends FilterInputStream {
    private FileChannel myFileChannel;
    private long mark = -1;

    public MarkableFileInputStream(FileInputStream fis) {
        super(fis);
        myFileChannel = fis.getChannel();
    }

    @Override
    public boolean markSupported() {
        return true;
    }

    @Override
    public synchronized void mark(int readlimit) {
        try {
            mark = myFileChannel.position();
        } catch (IOException ex) {
            mark = -1;
        }
    }

    @Override
    public synchronized void reset() throws IOException {
        if (mark == -1) {
            throw new IOException("not marked");
        }
        myFileChannel.position(mark);
    }
}


 类似资料:
  • 本文向大家介绍基于Java文件输入输出流实现文件上传下载功能,包括了基于Java文件输入输出流实现文件上传下载功能的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了Java实现文件上传下载功能的具体代码,供大家参考,具体内容如下 前端通过form表单的enctype属性,将数据传递方式修改为二进制”流“的形式,服务端(servlet)通过  getInputStream() 获取流信息,

  • 问题内容: 我正在尝试浏览目录中的所有文件,如果有目录,则浏览其所有文件,依此类推,直到没有更多目录可访问。每个处理的项目将添加到下面的函数中的结果数组中。尽管我不确定我能做什么/我做错了什么,但是它不起作用,但是当处理下面的代码时,浏览器的运行速度非常慢,不胜感激,谢谢! 码: 问题答案: 获取目录中的所有文件和文件夹,如果拥有或,请不要调用函数。 您的代码: 输出(示例):

  • 本文向大家介绍python实现ftp文件传输功能,包括了python实现ftp文件传输功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现ftp文件传输的具体代码,供大家参考,具体内容如下 主要步骤可以分为以下几步: 1.读取文件名 2.检测文件是否存在 3.打开文件 4.检测文件大小 5.发送文件大小和 md5值给客户端 6.等客户端确认 7.开始边读边发数据 服务

  • 本文向大家介绍js实现Select下拉框具有输入功能的方法,包括了js实现Select下拉框具有输入功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js实现Select下拉框具有输入功能的方法。分享给大家供大家参考。具体实现方法如下: 实现方法一 实现方式二 希望本文所述对大家的javascript程序设计有所帮助。

  • 问题内容: 我有一个以字典为参数的函数。我将传递给各种字典的字典,这些字典比函数内部使用的字典要多。另外,我想在函数定义中查看需要哪些键。所以我写 但是,该函数现在接受任何输入为。有没有聪明的写作方法 就像是 问题答案: 在python3.x中,您可以使用函数注释: 您甚至可以疯狂地使用现在被口译人员接受的文字 你可以从我的第一个例子中看到,注释不 执行 任何东西。您必须在函数本身中执行验证,尽管

  • 问题内容: 我下面有以下代码示例。你可以在其中输入的命令,即回显结果。但是,先读后。其他输出流不起作用? 为什么会这样或我做错了什么?我的最终目标是创建一个线程计划任务,该任务定期执行对/ bash的命令,因此必须一前一后工作,而不能停止工作。我也一直在经历错误的任何想法? 谢谢。 问题答案: 首先,我建议更换生产线 与线 ProcessBuilder是Java 5中的新增功能,它使运行外部进程更