Я пытаюсь загрузить читаемые данные gtfs в реальном времени (формат буфера протокола) с помощью Java, чтобы просмотреть их в текстовом файле.
Я попробовал несколько подходов:
Подход №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 одинаково, результаты одинаковы.
Я также попробовал предложение, найденное здесь, но в итоге получил ошибки: got-messy-code">При использовании буферов протокола Google для передачи строкового символа получен беспорядочный код
Я прочитал документы буфера протокола, но еще больше запутался. 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 для создания InputStream для декодирования потока байтов, закодированного в Base64, но данные стали еще более искаженными.