从InputStream获取大小的影响最小的方法

时间:2018-07-25 18:30:14

标签: java inputstream

我正在尝试获取InputStream的大小,以与文件传输进行比较,以确保传输所有文件数据。我正在使用Jcraft的ChannelSftp和SftpProgressMonitor,但是SftpProgressMonitor.init()不为InputStreams提供max,所以我想在内部找到它。

在系统的这一点上,我知道InputStream不会再被写入,我无法轻易访问原始文件来读取该大小,而且我已经看到许多其他实现读入字节数组或ByteArrayOutputStream。如果我想为实际的SFTP调用维护InputStream,哪种方法对系统的总体影响最小?正在写入的文件可能很大(至1+ GB),因此简单的实现可能会产生重大影响。

1 个答案:

答案 0 :(得分:0)

在使用JSch API的上下文中,在调用ChannelSftp.get()之前,您可以调用ChannelSftp.lstat()

这将返回一个{。{3}},其中包含一个.getSize()方法,该方法返回以字节为单位的文件大小。这应该告诉您要检索整个文件需要获取多少字节。

请记住,如果要获取的文件经常更改大小,则在获取文件大小和开始文件传输之间可能存在竞争。因此,如果仅将其用作进度指示器,则此方法应该很好,但是如果您分配静态缓冲区或类似的东西,则可能需要重新考虑您的方法。