0

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

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

所以我的问题是,有时我得到的 HTML 已损坏。主要是它在整个文档中有多个 Null-Bytes,我可以使用 replaceAll 将其删除。但另一件事是,它似乎有一些文本块两次(或更多?),所以不是“这是一个文本,请读我。” 我得到类似“这是一个 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);
            }
        }

任何想法,我做错了什么?

问候!

4

1 回答 1

2

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

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

于 2013-05-03T11:28:49.953 回答