コード例 #1
0
ファイル: Helper.java プロジェクト: jruyi/jruyi
  public static void write(ICharsetCodec cc, CharBuffer cb, IUnitChain unitChain) {
    final CharsetEncoder encoder = cc.getEncoder();
    try {
      IUnit unit = Util.lastUnit(unitChain);
      ByteBuffer bb = unit.getByteBufferForWrite();

      boolean flush = false;
      encoder.reset();
      for (; ; ) {
        CoderResult cr = flush ? encoder.flush(bb) : encoder.encode(cb, bb, true);
        unit.size(bb.position() - unit.start());
        if (cr.isOverflow()) {
          unit = Util.appendNewUnit(unitChain);
          bb = unit.getByteBufferForWrite();
          continue;
        }

        if (!cr.isUnderflow()) cr.throwException();

        if (flush) break;
        else flush = true;
      }
    } catch (CharacterCodingException e) {
      throw new RuntimeException(e);
    } finally {
      cc.releaseEncoder(encoder);
    }
  }
コード例 #2
0
ファイル: CharArrayCodec.java プロジェクト: jruyi/jruyi
 @Override
 public void prepend(char[] chars, int offset, int length, IUnitChain unitChain) {
   final ICharsetCodec cc = CharsetCodec.get(m_charsetName);
   try (BytesBuilder bb = BytesBuilder.get()) {
     cc.encode(chars, offset, length, bb);
     length = bb.length();
     IUnit unit = Util.firstUnit(unitChain);
     while ((length -= Helper.prepend(bb, 0, length, unit)) > 0)
       unit = Util.prependNewUnit(unitChain);
   }
 }
コード例 #3
0
ファイル: CharArrayCodec.java プロジェクト: jruyi/jruyi
 @Override
 public char[] get(IUnitChain unitChain, int index) {
   final ByteBufferArray bba = ByteBufferArray.get();
   try {
     IUnit unit = unitChain.currentUnit();
     bba.add(unit.getByteBufferForRead(index, unit.size() - index));
     while ((unit = unitChain.nextUnit()) != null)
       bba.add(unit.getByteBufferForRead(0, unit.size()));
     final ICharsetCodec cc = CharsetCodec.get(m_charsetName);
     return cc.decode(bba.array(), 0, bba.size());
   } finally {
     bba.clear();
   }
 }
コード例 #4
0
ファイル: Helper.java プロジェクト: jruyi/jruyi
 public static void prepend(ICharsetCodec cc, StringBuilder sb, IUnitChain unitChain) {
   try (BytesBuilder bb = BytesBuilder.get()) {
     cc.encode(sb, bb);
     int length = bb.length();
     IUnit unit = Util.firstUnit(unitChain);
     while ((length -= prepend(bb, 0, length, unit)) > 0) unit = Util.prependNewUnit(unitChain);
   }
 }
コード例 #5
0
ファイル: CharArrayCodec.java プロジェクト: jruyi/jruyi
 @Override
 public char[] read(IUnitChain unitChain) {
   final ByteBufferArray bba = ByteBufferArray.get();
   try {
     IUnit unit = unitChain.currentUnit();
     bba.add(unit.getByteBufferForRead(unit.position(), unit.remaining()));
     unit.position(unit.size());
     while ((unit = unitChain.nextUnit()) != null) {
       bba.add(unit.getByteBufferForRead(unit.position(), unit.remaining()));
       unit.position(unit.size());
     }
     final ICharsetCodec cc = CharsetCodec.get(m_charsetName);
     return cc.decode(bba.array(), 0, bba.size());
   } finally {
     bba.clear();
   }
 }
コード例 #6
0
ファイル: CharArrayCodec.java プロジェクト: jruyi/jruyi
  @Override
  public char[] read(IUnitChain unitChain, int length) {
    if (length < 0) throw new IllegalArgumentException();
    if (length == 0) return Helper.EMPTY_CHARS;

    final ByteBufferArray bba = ByteBufferArray.get();
    try {
      IUnit unit = unitChain.currentUnit();
      bba.add(unit.getByteBufferForRead(unit.position(), length));
      while ((length -= unit.skip(length)) > 0) {
        unit = unitChain.nextUnit();
        bba.add(unit.getByteBufferForRead(unit.position(), length));
      }
      final ICharsetCodec cc = CharsetCodec.get(m_charsetName);
      return cc.decode(bba.array(), 0, bba.size());
    } finally {
      bba.clear();
    }
  }
コード例 #7
0
ファイル: CharArrayCodec.java プロジェクト: jruyi/jruyi
  @Override
  public char[] get(IUnitChain unitChain, int index, int length) {
    if (length < 0) throw new IndexOutOfBoundsException();
    if (length == 0) return Helper.EMPTY_CHARS;

    final ByteBufferArray bba = ByteBufferArray.get();
    try {
      IUnit unit = unitChain.currentUnit();
      bba.add(unit.getByteBufferForRead(index, length));
      length -= (unit.size() - index);
      while (length > 0) {
        unit = unitChain.nextUnit();
        if (unit == null) throw new IndexOutOfBoundsException();
        bba.add(unit.getByteBufferForRead(0, length));
        length -= unit.size();
      }
      final ICharsetCodec cc = CharsetCodec.get(m_charsetName);
      return cc.decode(bba.array(), 0, bba.size());
    } finally {
      bba.clear();
    }
  }