如何在不先保存的情况下在 Android 中发送 zip 文件?
Posted
技术标签:
【中文标题】如何在不先保存的情况下在 Android 中发送 zip 文件?【英文标题】:How to send a zip file in Android without saving it first? 【发布时间】:2020-03-22 22:04:52 【问题描述】:我有这个代码可以压缩成 zip 格式的一些文件:
public int zip(List<String> _files, String zipFileName)
try
BufferedInputStream origin = null;
FileOutputStream dest = new FileOutputStream(zipFileName);
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
dest));
byte data[] = new byte[BUFFER];
for (int i = 0; i < _files.size(); i++)
Log.v("Compress", "Adding: " + _files.get(i));
FileInputStream fi = new FileInputStream(_files.get(i));
origin = new BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(_files.get(i).substring(_files.get(i).lastIndexOf(File.separator) + 1));
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1)
out.write(data, 0, count);
origin.close();
out.close();
catch (Exception e)
e.printStackTrace();
return 1;
我想获取 ZipOutPutStream 并通过 Intent 或其他方式发送它,而不是像这样保存:
while ((count = origin.read(data, 0, BUFFER)) != -1)
out.write(data, 0, count);
有办法吗?目前我只能使用其保存的名称作为字符串发送 zip。
【问题讨论】:
【参考方案1】:没有办法。 Intent 被限制为 2 MB,因此它只能容纳一个非常小的 zip 文件。接收者并不期待原始数据。您也不能发送对象(如 ZipOutputStream),因为 Intents 仅发送其附加内容的序列化版本,因为接收者可能不在同一个进程中。
【讨论】:
诀窍是您需要在接收者完成后将其删除。因此,可能值得将其写入缓存文件并让 android 为您执行此操作,或者在将来的某个时间执行此操作。 嗯...我并没有考虑将它写入缓存中。我该怎么做? 对于 zip 文件名,使其相对于缓存目录 getCacheDir()。以上是关于如何在不先保存的情况下在 Android 中发送 zip 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不先“下载”的情况下通过 Android 网络浏览器显示 PDF
如何在不大幅增加其大小的情况下在 PowerShell 中保存文本文件?
如何在不登录的情况下在 Android 中发布到 Facebook Wall?
如何在不使用 System.Net 类的情况下在 C# 中发送 HTTP 请求? [复制]