java - Java 程序中的下载有时会损坏

标签 java download corrupt

我正在尝试编写一个java程序来备份远程服务器上的HTTP目录。远程服务器跨越多个 VPN/防火墙/其他设备,因此连接并不总是最好的。

所以我首先下载根目录列表并递归地浏览条目。这是一个简单的单线程程序。

所以我的问题是,有时我得到的 HTML 已损坏。主要是它在整个文档中有多个空字节,我可以使用replaceAll将其删除。 但另一件事是,它似乎有一些文本 block 两次(或更多次?),所以而不是“这是一个文本,请读我。”我得到类似“这是一个 teis 是一个 xt,请读我的信息。”。如果你删掉重复的“is is a”,那就没问题了。整个文档中通常有多个重复文本。

当我使用浏览器(即 Firefox)浏览目录时,没有任何问题,一切看起来都很好。只是我的下载器不断收到损坏的数据。

这是我的代码片段,它获取 HTML 列表数据:

        InputStream is = con.getInputStream();
        if ("gzip".equals(con.getContentEncoding())) {
            is = new GZIPInputStream(is);
        }
        int x = 0;
        byte[] data = new byte[1024];
        while ((x = is.read(data, 0, 1024)) >= 0) {
            if (x > 0) {
                retval += new String(data);
            }
        }

有什么想法吗,我做错了什么?

您好!

最佳答案

替换为:
retval += new String(data, 0, x);

如果您之前阅读的内容少于 10241024,您将得到 x + (1024-x code>) 上一个循环留下的数据

关于java - Java 程序中的下载有时会损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16357730/

相关文章:

java - 如何检查二维数组中的对角邻居并将当前值设置为等于邻居数量

java - 如何使用 Jackson 反序列化 Avro 文件?

java - 字符串到 InetAddress 转换时出错

java - 如何使用 Java - Selenium 组合清除表单上的输入字段

iphone - 使用 AFNetworking 下载文件

asp.net - MVC 4 导出到 CSV - 另存为对话框在 Chrome 和 Firefox 中不起作用

android - 直接下载安装一个android apk

python - vlc mac python 绑定(bind)无视频输出

vba - 使用 vba name 语句将 xls 转换为 xlsx 会损坏文件

r - R 中的损坏错误? - "Error in fetch(key) : lazy-load database ' C :/Program Files/R/R-3. 4.1/library/ROSE/help/ROSE.rdb'已损坏”