【发布时间】:2010-10-23 15:22:37
【问题描述】:
我想通过读取文件的第一部分并分析内容来确定文件的类型(通常是 UTF-8)。 (该类型特定于我的社区,但不受我的控制,也不受通常为 TEXT_PLAIN 的 MIME/MediaType 覆盖)。我正在使用客户端上的“org.restlet”库来分析带有
的标头Request request = new Request(Method.HEAD, url);
所以我知道内容长度,并且可以(如果必要和可能的话)估计我应该下载多少字节进行分析
澄清:我无法使用 MediaType。从答案 1 看来我必须获取内容。因此,修改后的问题是:
“我可以使用 Restlet 获取文件的部分吗?”
回答: 下面的代码做我想要的。我感谢@BalusC 为我指明了方向。如果我遗漏了什么,请发表评论:
public String readFirstChunk(String urlString, int byteCount) {
String text = null;
if (urlString != null) {
org.restlet.Client restletClient = new org.restlet.Client(Protocol.HTTP);
Request request = new Request(Method.GET, urlString);
List<Range> ranges = Collections.singletonList(new Range(0, byteCount));
request.setRanges(ranges);
Response response = restletClient.handle(request);
if (Status.SUCCESS_OK.equals(response.getStatus())) {
text = processSuccessfulChunkRequest(response);
} else if (Status.SUCCESS_PARTIAL_CONTENT .equals(response.getStatus())) {
text = processSuccessfulChunkRequest(response);
} else {
System.err.println("FAILED "+response.getStatus());
}
}
return text;
}
private String processSuccessfulChunkRequest(Response response) {
String text = null;
try {
text = response.getEntity().getText();
} catch (IOException e) {
throw new RuntimeException("Cannot download chunk", e);
}
return text;
}
【问题讨论】:
-
我们发现您无法增强正在阅读的文件,因此它们包含文件类型。我们知道我们可以使用 InputStream 从每个文件中读取少量字节。你有什么问题?
-
@Tony Ennis。我想你已经回答了我的问题。我应该从 URL 创建一个 inputStream 并读取一些字节。我忘记了 InputStream