首页 > 解决方案 > 使用带有 GTFS 数据的协议缓冲区时无法克服“无效的线路类型”

问题描述

我正在尝试使用 Google 的 GTFS 数据,但在尝试解析从 GTFS api 下载的流时出现此错误

这是设置:

你可以用记事本打开这个文件,它说它是2.0版

我运行下载的可执行文件,它生成一个以后可以使用的 java 包,方法是提供我下载的 proto 文件,如下所示:

protoc-2.5.0-windows-x86_64.exe --proto_path=. --java_out=. gtfs.proto

我构建了一个 main() 方法,旨在打开数据,并提取中转更新记录,如下所示:

import com.google.transit.realtime.GtfsRealtime.FeedEntity;
import com.google.transit.realtime.GtfsRealtime.FeedMessage;
import java.io.File;
import java.io.FileInputStream;

public class GtfsRealtimeExample {

public static void main(String[] args) throws Exception {

  File file = new File("c:/temp/GTFSR.data"); 
  FeedMessage feed = FeedMessage.parseFrom(new FileInputStream(file));

  for (FeedEntity entity : feed.getEntityList()) {
       if (entity.hasTripUpdate()) {
          System.out.println(entity.getTripUpdate());
       }
   }
  }
}

但是,当我运行它时,我得到了错误:

Exception in thread "main" com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.
    at com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:99)
    at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:498)
    at com.google.protobuf.AbstractMessage$Builder.mergeFieldFrom(AbstractMessage.java:508)
    at com.google.protobuf.GeneratedMessage$ExtendableMessage.parseUnknownField(GeneratedMessage.java:661)
    at com.google.transit.realtime.GtfsRealtime$FeedHeader.<init>(GtfsRealtime.java:1234)
    at com.google.transit.realtime.GtfsRealtime$FeedHeader.<init>(GtfsRealtime.java:1217)
    at com.google.transit.realtime.GtfsRealtime$FeedHeader$1.parsePartialFrom(GtfsRealtime.java:1291)
    at com.google.transit.realtime.GtfsRealtime$FeedHeader$1.parsePartialFrom(GtfsRealtime.java:1)
    at com.google.protobuf.CodedInputStream.readMessage(CodedInputStream.java:309)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage.<init>(GtfsRealtime.java:154)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage.<init>(GtfsRealtime.java:126)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage$1.parsePartialFrom(GtfsRealtime.java:203)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage$1.parsePartialFrom(GtfsRealtime.java:1)
    at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:200)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:217)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:223)
    at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
    at com.google.transit.realtime.GtfsRealtime$FeedMessage.parseFrom(GtfsRealtime.java:400)
    at GtfsRealtimeExample.main(GtfsRealtimeExample.java:20)

我已经使用最新版本的 protoc(版本 3)和运行时库的相应 v3 进行了尝试,但得到了相同的结果。

我究竟做错了什么 ?!!

标签: javaprotocol-buffers

解决方案


推荐阅读