我正在尝试编写一个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);
}
}
任何想法,我做错了什么?
问候!
答案 0 :(得分:2)
替换为:
retval += new String(data, 0, x);
如果您阅读的内容少于1024
和1024
,则会获得前一个循环留下的x
+(1024-x
)数据