/** {@inheritDoc} */
  @Override
  public void outStream(int type, long memPtr) throws Exception {
    try (PlatformMemory mem = platformCtx.memory().get(memPtr)) {
      PlatformOutputStream out = mem.output();

      BinaryRawWriterEx writer = platformCtx.writer(out);

      target.processOutStream(type, writer);

      out.synchronize();
    } catch (Exception e) {
      throw target.convertException(e);
    }
  }
  /** {@inheritDoc} */
  @Override
  public void inStreamOutStream(int type, long inMemPtr, long outMemPtr) throws Exception {
    try (PlatformMemory inMem = platformCtx.memory().get(inMemPtr)) {
      BinaryRawReaderEx reader = platformCtx.reader(inMem);

      try (PlatformMemory outMem = platformCtx.memory().get(outMemPtr)) {
        PlatformOutputStream out = outMem.output();

        BinaryRawWriterEx writer = platformCtx.writer(out);

        target.processInStreamOutStream(type, reader, writer);

        out.synchronize();
      }
    } catch (Exception e) {
      throw target.convertException(e);
    }
  }
  /** {@inheritDoc} */
  @Override
  public Object inObjectStreamOutObjectStream(int type, Object arg, long inMemPtr, long outMemPtr)
      throws Exception {
    PlatformMemory inMem = null;
    PlatformMemory outMem = null;

    try {
      BinaryRawReaderEx reader = null;

      if (inMemPtr != 0) {
        inMem = platformCtx.memory().get(inMemPtr);

        reader = platformCtx.reader(inMem);
      }

      PlatformOutputStream out = null;
      BinaryRawWriterEx writer = null;

      if (outMemPtr != 0) {
        outMem = platformCtx.memory().get(outMemPtr);

        out = outMem.output();

        writer = platformCtx.writer(out);
      }

      PlatformTarget res =
          target.processInObjectStreamOutObjectStream(type, unwrapProxy(arg), reader, writer);

      if (out != null) out.synchronize();

      return wrapProxy(res);
    } catch (Exception e) {
      throw target.convertException(e);
    } finally {
      try {
        if (inMem != null) inMem.close();
      } finally {
        if (outMem != null) outMem.close();
      }
    }
  }