将gtfs实时数据流式传输为人类可读格式

时间:2015-01-02 23:26:52

标签: base64 inputstream protocol-buffers gtfs

我正在尝试使用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,结果是一样的。

我也尝试了这里的建议,但我最终得到了错误: When using google protocol buffers to transfer String character,got messy code

我通过协议缓冲区文档阅读但我更加困惑。 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方法创建一个用于解码Base64编码字节流的InputStream,但数据更加严重。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

正如其他人提到的,gtfs-realtime文件是二进制文件,需要特殊的协议缓冲区编译代码才能解析。你无法使用Base64解码。


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

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

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

这是sample JSON output