我正在尝试使用 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 结果相同):
导入 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,所以结果是相同的。
我也尝试了这里的建议,但最终出现了错误:使用google协议缓冲区传输字符串字符时,出现乱码 https://stackoverflow.com/questions/14189808/when-using-google-protocol-buffers-to-transfer-string-character-got-messy-code
我通读了协议缓冲区文档,但我变得更加困惑。https://developers.google.com/protocol-buffers/docs/encoding 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 编码的字节流,但数据变得更加混乱。