我需要编写一个接受某种输入流内容(例如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中的新增功能,它使运行外部进程更