1

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

4

1 回答 1

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

于 2012-10-17T22:02:58.720 回答