我正在尝试使用协议缓冲区来记录一些市场数据.每当我从市场上收到报价通知时,我都会使用此报价并将其转换为协议缓冲区对象.然后我称“ writeDelimitedTo”
我的录音机示例:
try {
writeLock.lock();
LimitOrder serializableQuote = ...
LimitOrderTransport gpbQuoteRaw = serializableQuote.serialize();
LimitOrderTransport gpbQuote = LimitOrderTransport.newBuilder(gpbQuoteRaw).build();
gpbQuote.writeDelimitedTo(fileStream);
csvWriter1.println(gpbQuote.getIdNumber() + DELIMITER+ gpbQuote.getSymbol() + ...);
} finally {
writeLock.unlock();
}
锁定的原因是因为来自不同市场的报价是由不同的线程处理的,所以我试图简化并将日志记录“串行化”到文件中.
读取结果文件的代码:
FileInputStream stream = new FileInputStream(pathToFile);
PrintWriter writer = new PrintWriter("quoteStream6-compare.csv", "UTF-8");
while(LimitOrderTransport.newBuilder().mergeDelimitedFrom(stream)) {
LimitOrderTransport gpbQuote= LimitOrderTransport.parseDelimitedFrom(stream);
csvWriter2.println(gpbQuote.getIdNumber()+DELIMITER+ gpbQuote.getSymbol() ...);
}
运行记录器时,我得到的二进制文件似乎越来越大.当我使用阅读器读取文件时,我似乎也得到了大量的引号.它们都是不同的并且看起来正确.
这是问题所在:许多引号似乎是“缺失”-当我的读者从文件中读取时,这些引号不存在.
我尝试使用csvWriter1和csvWriter2进行实验.在我的作家中,我写出一个csv文件,然后在我的读者中,使用protobufs文件作为源,编写第二个cvs文件.
从理论上讲,它们应该匹配.他们不匹配.原始的csv文件中包含的引号比通过读取protobufs记录的数据生成的csv要多.
是什么赋予了?我没有正确使用writeDelimitedTo / parseDelimitedFrom吗?
谢谢!