我想用Camel在一个文件中写一个字节数组。但是,为了取回我的数组,我想逐行编写它们,或者用另一个分隔符编写它们。 如何用Camel做到这一点?
from(somewhere)
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
final MyObject body = exchange.getIn().getBody(MyObject.class);
byte[] serializedObject = MySerializer.serialize(body);
exchange.getOut().setBody(serializedObject);
exchange.getOut().setHeader(Exchange.FILE_NAME, "filename");
}
}).to("file://filepath?fileExist=Append&autoCreate=true");
或者是否有人有其他办法让他们回来?
PS:我只需要一个文件,否则就太容易了......
编辑: 我成功地使用out.writeObject方法逐行编写我的文件(感谢Petter)。我可以用以下内容阅读:
InputStream file = new FileInputStream(FILENAME);
InputStream buffer = new BufferedInputStream(file);
input = new ObjectInputStream(buffer);
Object obj = null;
while ((obj = input.readObject()) != null) {
// Do something
}
但我无法用骆驼分裂和阅读它们。你有任何想法用Camel阅读它们吗?
答案 0 :(得分:1)
这取决于序列化对象的外观,因为您似乎拥有自己的序列化程序。它是标准的java二进制文件
ByteArrayOutputStream bos = new ByteArrayOuputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(obj);
return bos.toByteArray();
使用基于文本的分隔符(如\ n。
)可能不是一个好主意您不能将其序列化为某种文本格式吗? Camel有几种易于使用的数据格式:(http://camel.apache.org/data-format.html)。例如,Xstream是一行代码,要从对象创建XML,那么将文件拆分为多个XML部分并使用XStream读取它们并不是什么大不了的事。
在您的示例中,如果您确实需要分隔符,为什么不将它追加到byte []?将数组复制到一个新的更大的byte []并最后插入一些唯一的序列。