我想用Java从网上下载并解析Mapbox PBF文件。如果我手动下载该文件,我可以解析它而不会出现任何错误。但是,如果我使用Java代码下载文件,然后尝试解析下载的文件,则会出现以下异常:
Exception in thread "main"
com.google.protobuf.InvalidProtocolBufferException$InvalidWireTypeException: Protocol message tag had invalid wire type.
at com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:111)
通过谷歌搜索这个错误,一些人说该文件已损坏。
当我试图以编程的方式将这种二进制数据写入文件时,我是否遗漏了什么?
下面的代码显示了我下载文件的两种方式:
技巧1
fileURL = "https://api.mapbox.com/v4/mapbox.mapbox-traffic-v1/17/36159/54906.vector.pbf?style=mapbox://styles/fnembhard/ck9inh9df002c1jpnccjg20pw@00&access_token=..."
public void saveFile1(String fileURL, String fileName){
try{
URL testURL = new URL(fileURL);
if(testURL.getHost() != null) {
InputStream in = new URL(fileURL).openStream();
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
}
catch(Exception e){
e.printStackTrace();
}
}
技巧2
public void saveFile2(String fileURL, String fileName){
try {
URL testURL = new URL(fileURL);
if (testURL.getHost() != null) {
InputStream in = new URL(fileURL).openStream();
// File f = new URL(fileURL).getFile();
OutputStream outputStream = new FileOutputStream(fileName);
int byteRead;
while ((byteRead = in.read()) != -1) {
outputStream.write(byteRead);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
你能提供你是如何解析协议文件的吗?
要解析protobuf文件,您需要了解其模式:java中PB的通用解析
如果您提供给FileDescriptorS的字节et.parseFrom
来填充一个FileDescriptorSet
是二进制原型内容(编译后的模式)这应该可以工作。
如果不是,这里可能就是这种情况,那么您将需要一个运行时。pbf解析器。不幸的是,Java Protobuf库没有加载的方法。直接使用pbf。
通过使用带有--descriptor\u set\u out
选项的protoc
命令行工具,可以获得一个已编译的模式。
另请参阅此处:协议缓冲区:如何在Java中解析. proto文件
我无法找到正确的方法来实现我的目标,即下载带有java selenium脚本的pdf。
问题内容: 我编写了一些代码来下载我所做的网络广播的一集。它获取剧集的URL,并获取保存它的位置。但是,它最多只能下载16MB,然后自动取消。我不完全确定要增加此值需要更改什么值。是否可以,有人可以指出正确的方向吗?谢谢! 下载代码: 问题答案: 快速查看transferFrom的文档: 好。 计数的值1 << 24(来自原始问题)等于16M 我想这就是您的问题的答案:-)
问题内容: 我正在尝试获取下载链接并下载文件。 我有一个包含以下链接的日志文件: 我有这样的代码: 到目前为止,我不知道如何获取下载链接并下载它。可以使用selenium下载文件吗? 问题答案: 根据文档,您应该配置为自动下载具有指定内容类型的文件。这是在txt文件中使用第一个URL的示例,该文件将文件保存在当前目录中: 注意,我也简化了xpath。
我想用php从我的服务器下载文件。我搜索了谷歌,在这里找到了答案。这个答案表明我必须为此编写这些代码。 但我能做到这一点,只需这两行: 那么,我为什么还要像上面的代码那样多写几行呢?
问题内容: 我试图使用Python从Internet下载某些内容,但我使用的是urllib模块,但无法正常工作。我希望能够将下载的文件保存到我选择的位置。如果有人可以用清晰的例子向我解释如何做到这一点,将不胜感激。 问题答案: 我建议像这样使用urllib2: 您甚至可以将其缩短为(尽管,如果您打算将每个单独的调用括在-中,则不想将其缩短):
我正在使用axios处理基本的http请求,如GET和POST,并且运行良好。现在我需要能够下载Excel文件了。axios是否可以实现这一点?如果有,有人有一些示例代码吗?如果没有,我还可以在React应用程序中使用什么来执行相同的操作?