2

我正在尝试使用 Java 下载可读的 gtfs 实时数据(协议缓冲区格式),以便我可以在文本文件中查看它。

我尝试了几种方法:

方法#1:

URL url = new URL(uri); 
byte[] buffer = new byte[4096];
InputStream is = url.openStream();
byte[] buffer = new byte[4096];
InputStream is = url.openStream();
File file = new File("c:/protobuf_data.txt");
OutputStream output = new FileOutputStream(file);
int numOfBytesReadIntoBuffer = -1;
while((numOfBytesReadIntoBuffer = is.read(buffer)) != -1){
    output.write(buffer, 0, numOfBytesReadIntoBuffer);
}

results (snippet):
099700_L..S20150102*LÊ>0L 1637 8AV/RPY!¯¬œ¥¾¬œ¥"L22S(

方法#2(与方法#1的结果相同):import org.apache.commons.io.IOUtils;

URL url = new URL(uri); 
InputStream is = url.openStream();
File file = new File("c:/protobuf_data.txt");
OutputStream output = new FileOutputStream(file);
byte[] bytes = IOUtils.toByteArray(is);
output.write(bytes);

我猜是因为它们都以相同的方式写入 OutputStream,结果是相同的。

我也尝试了这里找到的建议,但我最终得到了错误: 当使用谷歌协议缓冲区传输字符串字符时,代码混乱

我通读了协议缓冲区文档,但我更加困惑。https://developers.google.com/protocol-buffers/docs/encoding

我使用了 com.sun.org.apache.xml.internal.security.utils.Base64 但出现错误。方法#3

URL url = new URL(uri);
InputStream is = url.openStream();

File file = new File("c:/users/Workstation/protobuf_data_bytes.txt");

OutputStream output = new FileOutputStream(file);

byte[] bytes = IOUtils.toByteArray(is);
Init.init();
byte[] decoded_bytes = Base64.decode(bytes);

error:
Exception in thread "main" com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException: Error while decoding

我还尝试使用 java.util.Base64 的 wrap 方法创建一个 InputStream 来解码 Base64 编码的字节流,但数据变得更加混乱。

4

2 回答 2

1

GTFS-realtime 规范现在包括用于以多种语言解析 GTFS-realtime 数据的代码示例:

https://developers.google.com/transit/gtfs-realtime/code-samples

在以您喜欢的语言解析 GTFS 实时数据时,这是一个很好的起点。

于 2015-02-05T19:48:40.927 回答
1

正如其他人提到的,gtfs-realtime 文件是二进制文件,需要特殊的 Protocol Buffer 编译代码来解析。使用 Base64 解码,您将一事无成。


替代方法(命令行+ JSON):

但是,如果您只是尝试将 gtfs-realtime 文件解析为人类可读的格式,我编写了一个将 GTFS-realtime 转换为 JSON 的独立工具:https ://github.com/harrytruong/gtfs_realtime_json

只需下载(无需安装),然后运行:gtfs_realtime_json <feed_url>

这是一个示例 JSON 输出

于 2015-02-25T07:28:12.680 回答