1

次のコードで記述されたJava オブジェクトを含むファイルがあります。

     from(somewhere).process(new Processor() {

          @Override
          public void process(final Exchange exchange) {
              ...
              ByteArrayOutputStream bos = new ByteArrayOutputStream();
              ObjectOutput out = new ObjectOutputStream(bos);
              out.writeObject(myObject);
              exchange.getOut().setBody(bos.toByteArray());
          }
     }).to("file://pathFile");

さぁ、早く読みたい。どうすればそれができるのかわかりません。私が推測する次のコードのようなものです。

from("file://pathFile").convertBodyTo(String.class)

.split(body().tokenize("???")) // How can I tokenize my file ?

.streaming().threads(2)

.process(new Processor() {

      @Override
      public void process(final Exchange exchange) {
        String filePath = (String) exchange.getIn().getHeader(Exchange.FILE_PATH);
        File file = new File(filePath);
        MyObject myObject = null;
        try {
          FileInputStream fis = new FileInputStream(file);
          InputStream buffer = new BufferedInputStream(fis);
          ObjectInput input = new ObjectInputStream(buffer);

          Object obj = null;
          while ((obj = input.readObject()) != null) {
              // Do something
              myObject = obj;
          }

        } catch (Exception e) {
            ...
        } finally {
          ...
        }
        exchange.getIn().setBody(myObject);
      }
}).to(somewhere);

編集:オブジェクトを読み取る方法を編集します。そのコードにはまだ問題があり、ObjectOutputStream に追加できません。これにより、ストリームが破損します。この問題の解決策 [ここ] があります。ストリーム ヘッダーは 1 回しか書き込めません。

しかし、そうすると、複数のスレッドでファイルを分割して読み取ることができなくなります。ObjectOutputStream ヘッダーでファイルを分割またはアクセスできますか?

4

1 に答える 1

1

you just converted it to a String using convertBodyTo(String.class), therefore you have a String in the body rather than an InputStream....

于 2012-10-18T18:15:09.157 に答える