Я хотел бы загрузить и проанализировать PBF-файл Mapbox из Интернета, используя Java. Если я загружу файл вручную, я смогу проанализировать его без ошибок. Однако, если я использую код 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)
При поиске в Google этой ошибки некоторые люди говорят, что файл коррумпирован.
Что-то мне не хватает при попытке записать такие двоичные данные в файл программно?
Вот код, показывающий два способа загрузки файла:
Метод 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();
}
}