使用Camel逐行写入和读取文件

时间:2012-10-17 16:19:16

标签: file serialization bytearray apache-camel

我想用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阅读它们吗?

1 个答案:

答案 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 []并最后插入一些唯一的序列。