gpt4 book ai didi

java - 如何使用Java下载Mapbox PBF文件?

转载 作者:行者123 更新时间:2023-12-01 16:51:22 25 4
gpt4 key购买 nike

我想使用 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 文件?

要解析 protobuf 文件,您需要知道其架构:Generic Parsing of PB in java

如果您提供给 FileDescriptorSet.parseFrom 来填充 FileDescriptorSet 的字节是二进制 protobuf 内容(编译模式),这应该可以工作。

如果不是,这里可能就是这种情况,您将需要一个运行时 .pbf 解析器。不幸的是,Java Protobuf 库没有直接加载 .pbf 的方法。

您可以使用带有 --descriptor_set_out 选项的 protoc 命令行工具来获取已编译的架构。

另请参阅此处:Protocol Buffers: How to parse a .proto file in Java

关于java - 如何使用Java下载Mapbox PBF文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61680925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com