Android 动态GZIP到FTP服务器

Android 动态GZIP到FTP服务器,android,ftp,gzip,Android,Ftp,Gzip,我想获取SD卡上的一个文件,并在FTP时动态地GZip它。我不想创建一个interrum文件,将其另存为gzip,然后按照某人的建议删除这两个文件。必须有一种方法可以在动态代码中实现这一点。我的问题是这些文件中有一些是2.5亿。因此,我的基本代码如下所示: FTPClient con; FileInputStream in = new FileInputStream(files[i]); boolean result = con.storeFile(files[i].getName(), in)

我想获取SD卡上的一个文件,并在FTP时动态地GZip它。我不想创建一个interrum文件,将其另存为gzip,然后按照某人的建议删除这两个文件。必须有一种方法可以在动态代码中实现这一点。我的问题是这些文件中有一些是2.5亿。因此,我的基本代码如下所示:

FTPClient con;
FileInputStream in = new FileInputStream(files[i]);
boolean result = con.storeFile(files[i].getName(), in);
如果我能插入,那就太好了,但这失败的原因很明显:

GZIPInputStream gzip = new GZIPInputStream(in);
con.storeFile(files[i].getName(), gzip);

我得到一个幻数错误。

您可以使用。它支持内存中的gzip压缩。您只需将其编译到代码中。

deflateInit2()
deflate()
deflateEnd()
是一个分段压缩引擎,允许您一次输入小位,然后取出小位。有关示例,请参见
deflateInit2()
而不是
deflateInit()
允许您选择gzip格式。所以我必须在Android中编译这个NDK和JNI?我需要担心阵列内存分配吗?似乎我记得在某个地方,允许NDK创建数组会对内存空间产生一些负面影响。NDK提供了到zlib的接口。zlib没有使用太多的堆(小于1MB),所以对于通常有16MB堆的Android设备来说,这不是一个问题。有一次我不得不在线使用它,在手机上要做的工作太多了。但是很好的建议…等我有更多的时间或者你真的为它写了JNI的时候,我会尝试一下。