當前位置: 首頁>>代碼示例>>Java>>正文


Java CoderResult.isUnderflow方法代碼示例

本文整理匯總了Java中java.nio.charset.CoderResult.isUnderflow方法的典型用法代碼示例。如果您正苦於以下問題:Java CoderResult.isUnderflow方法的具體用法?Java CoderResult.isUnderflow怎麽用?Java CoderResult.isUnderflow使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在java.nio.charset.CoderResult的用法示例。


在下文中一共展示了CoderResult.isUnderflow方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: toString

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
String toString(byte[] ba, int length) {
    CharsetDecoder cd = decoder().reset();
    int len = (int)(length * cd.maxCharsPerByte());
    char[] ca = new char[len];
    if (len == 0)
        return new String(ca);
    ByteBuffer bb = ByteBuffer.wrap(ba, 0, length);
    CharBuffer cb = CharBuffer.wrap(ca);
    CoderResult cr = cd.decode(bb, cb, true);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    cr = cd.flush(cb);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    return new String(ca, 0, cb.position());
}
 
開發者ID:SunburstApps,項目名稱:OpenJSharp,代碼行數:17,代碼來源:ZipCoder.java

示例2: getBytes

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
byte[] getBytes(String s) {
    CharsetEncoder ce = encoder().reset();
    char[] ca = s.toCharArray();
    int len = (int)(ca.length * ce.maxBytesPerChar());
    byte[] ba = new byte[len];
    if (len == 0)
        return ba;
    ByteBuffer bb = ByteBuffer.wrap(ba);
    CharBuffer cb = CharBuffer.wrap(ca);
    CoderResult cr = ce.encode(cb, bb, true);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    cr = ce.flush(bb);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    if (bb.position() == ba.length)  // defensive copy?
        return ba;
    else
        return Arrays.copyOf(ba, bb.position());
}
 
開發者ID:AdoptOpenJDK,項目名稱:openjdk-jdk10,代碼行數:21,代碼來源:ZipCoder.java

示例3: toString

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
String toString(byte[] ba, int length) {
    CharsetDecoder cd = decoder().reset();
    int len = (int)(length * cd.maxCharsPerByte());
    char[] ca = new char[len];
    if (len == 0)
        return new String(ca);
    // UTF-8 only for now. Other ArrayDeocder only handles
    // CodingErrorAction.REPLACE mode. ZipCoder uses
    // REPORT mode.
    if (isUTF8 && cd instanceof ArrayDecoder) {
        int clen = ((ArrayDecoder)cd).decode(ba, 0, length, ca);
        if (clen == -1)    // malformed
            throw new IllegalArgumentException("MALFORMED");
        return new String(ca, 0, clen);
    }
    ByteBuffer bb = ByteBuffer.wrap(ba, 0, length);
    CharBuffer cb = CharBuffer.wrap(ca);
    CoderResult cr = cd.decode(bb, cb, true);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    cr = cd.flush(cb);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    return new String(ca, 0, cb.position());
}
 
開發者ID:lambdalab-mirror,項目名稱:jdk8u-jdk,代碼行數:26,代碼來源:ZipCoder.java

示例4: toString

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
String toString(byte[] ba, int off, int length) {
    CharsetDecoder cd = decoder().reset();
    int len = (int)(length * cd.maxCharsPerByte());
    char[] ca = new char[len];
    if (len == 0)
        return new String(ca);
    // UTF-8 only for now. Other ArrayDeocder only handles
    // CodingErrorAction.REPLACE mode. ZipCoder uses
    // REPORT mode.
    if (isUTF8 && cd instanceof ArrayDecoder) {
        int clen = ((ArrayDecoder)cd).decode(ba, off, length, ca);
        if (clen == -1)    // malformed
            throw new IllegalArgumentException("MALFORMED");
        return new String(ca, 0, clen);
    }
    ByteBuffer bb = ByteBuffer.wrap(ba, off, length);
    CharBuffer cb = CharBuffer.wrap(ca);
    CoderResult cr = cd.decode(bb, cb, true);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    cr = cd.flush(cb);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    return new String(ca, 0, cb.position());
}
 
開發者ID:AdoptOpenJDK,項目名稱:openjdk-jdk10,代碼行數:26,代碼來源:ZipCoder.java

示例5: getBytes

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
byte[] getBytes(String s) {
    CharsetEncoder ce = encoder().reset();
    char[] ca = s.toCharArray();
    int len = (int)(ca.length * ce.maxBytesPerChar());
    byte[] ba = new byte[len];
    if (len == 0)
        return ba;
    // UTF-8 only for now. Other ArrayDeocder only handles
    // CodingErrorAction.REPLACE mode.
    if (isUTF8 && ce instanceof ArrayEncoder) {
        int blen = ((ArrayEncoder)ce).encode(ca, 0, ca.length, ba);
        if (blen == -1)    // malformed
            throw new IllegalArgumentException("MALFORMED");
        return Arrays.copyOf(ba, blen);
    }
    ByteBuffer bb = ByteBuffer.wrap(ba);
    CharBuffer cb = CharBuffer.wrap(ca);
    CoderResult cr = ce.encode(cb, bb, true);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    cr = ce.flush(bb);
    if (!cr.isUnderflow())
        throw new IllegalArgumentException(cr.toString());
    if (bb.position() == ba.length)  // defensive copy?
        return ba;
    else
        return Arrays.copyOf(ba, bb.position());
}
 
開發者ID:lambdalab-mirror,項目名稱:jdk8u-jdk,代碼行數:29,代碼來源:ZipCoder.java

示例6: getSubstringByte

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
/**
 * 指定したバイト數で文字列をカットする
 *
 * @param obj 対象オブジェクト
 * @param capacity カットするバイト數
 * @return String
 * @throws CharacterCodingException
 * @throws UnsupportedEncodingException
 */
private String getSubstringByte(final Object obj, final int capacity) throws CharacterCodingException,
		UnsupportedEncodingException {

	String str = obj == null ? "null" : obj.toString();
	if (capacity < 1) {
		return str;
	}

	CharsetEncoder ce = Charset.forName(ENCODING_SHIFT_JIS).newEncoder()
			.onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE).reset();
	if (capacity >= ce.maxBytesPerChar() * str.length()) {
		return str;
	}
	CharBuffer cb = CharBuffer.wrap(new char[Math.min(str.length(), capacity)]);
	str.getChars(0, Math.min(str.length(), cb.length()), cb.array(), 0);

	if (capacity >= ce.maxBytesPerChar() * cb.limit()) {
		return cb.toString();
	}
	ByteBuffer out = ByteBuffer.allocate(capacity);
	ce.reset();
	CoderResult cr = null;
	if (cb.hasRemaining()) {
		cr = ce.encode(cb, out, true);
	} else {
		cr = CoderResult.UNDERFLOW;
	}
	if (cr.isUnderflow()) {
		cr = ce.flush(out);
	}
	return cb.flip().toString();
}
 
開發者ID:future-architect,項目名稱:uroborosql,代碼行數:42,代碼來源:DumpResultSqlFilter.java

示例7: encode

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
byte[] encode(char[] ca, int off, int len) {
    int en = scale(len, ce.maxBytesPerChar());
    byte[] ba = new byte[en];
    if (len == 0)
        return ba;
    if (ce instanceof ArrayEncoder) {
        int blen = ((ArrayEncoder)ce).encode(ca, off, len, ba);
        return safeTrim(ba, blen, cs, isTrusted);
    } else {
        ce.reset();
        ByteBuffer bb = ByteBuffer.wrap(ba);
        CharBuffer cb = CharBuffer.wrap(ca, off, len);
        try {
            CoderResult cr = ce.encode(cb, bb, true);
            if (!cr.isUnderflow())
                cr.throwException();
            cr = ce.flush(bb);
            if (!cr.isUnderflow())
                cr.throwException();
        } catch (CharacterCodingException x) {
            // Substitution is always enabled,
            // so this shouldn't happen
            throw new Error(x);
        }
        return safeTrim(ba, bb.position(), cs, isTrusted);
    }
}
 
開發者ID:lambdalab-mirror,項目名稱:jdk8u-jdk,代碼行數:28,代碼來源:StringCoding.java

示例8: decode

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
static char[] decode(Charset cs, byte[] ba, int off, int len) {
    // (1)We never cache the "external" cs, the only benefit of creating
    // an additional StringDe/Encoder object to wrap it is to share the
    // de/encode() method. These SD/E objects are short-lifed, the young-gen
    // gc should be able to take care of them well. But the best approash
    // is still not to generate them if not really necessary.
    // (2)The defensive copy of the input byte/char[] has a big performance
    // impact, as well as the outgoing result byte/char[]. Need to do the
    // optimization check of (sm==null && classLoader0==null) for both.
    // (3)getClass().getClassLoader0() is expensive
    // (4)There might be a timing gap in isTrusted setting. getClassLoader0()
    // is only chcked (and then isTrusted gets set) when (SM==null). It is
    // possible that the SM==null for now but then SM is NOT null later
    // when safeTrim() is invoked...the "safe" way to do is to redundant
    // check (... && (isTrusted || SM == null || getClassLoader0())) in trim
    // but it then can be argued that the SM is null when the opertaion
    // is started...
    CharsetDecoder cd = cs.newDecoder();
    int en = scale(len, cd.maxCharsPerByte());
    char[] ca = new char[en];
    if (len == 0)
        return ca;
    boolean isTrusted = false;
    if (System.getSecurityManager() != null) {
        if (!(isTrusted = (cs.getClass().getClassLoader0() == null))) {
            ba =  Arrays.copyOfRange(ba, off, off + len);
            off = 0;
        }
    }
    cd.onMalformedInput(CodingErrorAction.REPLACE)
      .onUnmappableCharacter(CodingErrorAction.REPLACE)
      .reset();
    if (cd instanceof ArrayDecoder) {
        int clen = ((ArrayDecoder)cd).decode(ba, off, len, ca);
        return safeTrim(ca, clen, cs, isTrusted);
    } else {
        ByteBuffer bb = ByteBuffer.wrap(ba, off, len);
        CharBuffer cb = CharBuffer.wrap(ca);
        try {
            CoderResult cr = cd.decode(bb, cb, true);
            if (!cr.isUnderflow())
                cr.throwException();
            cr = cd.flush(cb);
            if (!cr.isUnderflow())
                cr.throwException();
        } catch (CharacterCodingException x) {
            // Substitution is always enabled,
            // so this shouldn't happen
            throw new Error(x);
        }
        return safeTrim(ca, cb.position(), cs, isTrusted);
    }
}
 
開發者ID:SunburstApps,項目名稱:OpenJSharp,代碼行數:54,代碼來源:StringCoding.java

示例9: convert

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
/**
 * Convert the given characters to bytes.
 * 
 * @param cc
 *            char input
 * @param bc
 *            byte output
 */
public void convert(CharChunk cc, ByteChunk bc) throws IOException {
	if ((bb == null) || (bb.array() != bc.getBuffer())) {
		// Create a new byte buffer if anything changed
		bb = ByteBuffer.wrap(bc.getBuffer(), bc.getEnd(), bc.getBuffer().length - bc.getEnd());
	} else {
		// Initialize the byte buffer
		bb.limit(bc.getBuffer().length);
		bb.position(bc.getEnd());
	}
	if ((cb == null) || (cb.array() != cc.getBuffer())) {
		// Create a new char buffer if anything changed
		cb = CharBuffer.wrap(cc.getBuffer(), cc.getStart(), cc.getLength());
	} else {
		// Initialize the char buffer
		cb.limit(cc.getEnd());
		cb.position(cc.getStart());
	}
	CoderResult result = null;
	// Parse leftover if any are present
	if (leftovers.position() > 0) {
		int pos = bb.position();
		// Loop until one char is encoded or there is a encoder error
		do {
			leftovers.put((char) cc.substract());
			leftovers.flip();
			result = encoder.encode(leftovers, bb, false);
			leftovers.position(leftovers.limit());
			leftovers.limit(leftovers.array().length);
		} while (result.isUnderflow() && (bb.position() == pos));
		if (result.isError() || result.isMalformed()) {
			result.throwException();
		}
		cb.position(cc.getStart());
		leftovers.position(0);
	}
	// Do the decoding and get the results into the byte chunk and the char
	// chunk
	result = encoder.encode(cb, bb, false);
	if (result.isError() || result.isMalformed()) {
		result.throwException();
	} else if (result.isOverflow()) {
		// Propagate current positions to the byte chunk and char chunk
		bc.setEnd(bb.position());
		cc.setOffset(cb.position());
	} else if (result.isUnderflow()) {
		// Propagate current positions to the byte chunk and char chunk
		bc.setEnd(bb.position());
		cc.setOffset(cb.position());
		// Put leftovers in the leftovers char buffer
		if (cc.getLength() > 0) {
			leftovers.limit(leftovers.array().length);
			leftovers.position(cc.getLength());
			cc.substract(leftovers.array(), 0, cc.getLength());
		}
	}
}
 
開發者ID:how2j,項目名稱:lazycat,代碼行數:65,代碼來源:C2BConverter.java

示例10: read

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
@Override
public int read(byte[] b, int off, int len) throws IOException {
  // Obey InputStream contract.
  checkPositionIndexes(off, off + len, b.length);
  if (len == 0) {
    return 0;
  }

  // The rest of this method implements the process described by the CharsetEncoder javadoc.
  int totalBytesRead = 0;
  boolean doneEncoding = endOfInput;

  DRAINING:
  while (true) {
    // We stay in draining mode until there are no bytes left in the output buffer. Then we go
    // back to encoding/flushing.
    if (draining) {
      totalBytesRead += drain(b, off + totalBytesRead, len - totalBytesRead);
      if (totalBytesRead == len || doneFlushing) {
        return (totalBytesRead > 0) ? totalBytesRead : -1;
      }
      draining = false;
      byteBuffer.clear();
    }

    while (true) {
      // We call encode until there is no more input. The last call to encode will have endOfInput
      // == true. Then there is a final call to flush.
      CoderResult result;
      if (doneFlushing) {
        result = CoderResult.UNDERFLOW;
      } else if (doneEncoding) {
        result = encoder.flush(byteBuffer);
      } else {
        result = encoder.encode(charBuffer, byteBuffer, endOfInput);
      }

      if (result.isOverflow()) {
        // Not enough room in output buffer--drain it, creating a bigger buffer if necessary.
        startDraining(true);
        continue DRAINING;
      } else if (result.isUnderflow()) {
        // If encoder underflows, it means either:
        // a) the final flush() succeeded; next drain (then done)
        // b) we encoded all of the input; next flush
        // c) we ran of out input to encode; next read more input
        if (doneEncoding) { // (a)
          doneFlushing = true;
          startDraining(false);
          continue DRAINING;
        } else if (endOfInput) { // (b)
          doneEncoding = true;
        } else { // (c)
          readMoreChars();
        }
      } else if (result.isError()) {
        // Only reach here if a CharsetEncoder with non-REPLACE settings is used.
        result.throwException();
        return 0; // Not called.
      }
    }
  }
}
 
開發者ID:paul-hammant,項目名稱:googles-monorepo-demo,代碼行數:64,代碼來源:ReaderInputStream.java

示例11: putString

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
/**
 * {@inheritDoc}
 */
@Override
public IoBuffer putString(CharSequence val, CharsetEncoder encoder) throws CharacterCodingException {
    if (val.length() == 0) {
        return this;
    }

    CharBuffer in = CharBuffer.wrap(val);
    encoder.reset();

    int expandedState = 0;

    for (;;) {
        CoderResult cr;
        if (in.hasRemaining()) {
            cr = encoder.encode(in, buf(), true);
        } else {
            cr = encoder.flush(buf());
        }

        if (cr.isUnderflow()) {
            break;
        }
        if (cr.isOverflow()) {
            if (isAutoExpand()) {
                switch (expandedState) {
                case 0:
                    autoExpand((int) Math.ceil(in.remaining() * encoder.averageBytesPerChar()));
                    expandedState++;
                    break;
                case 1:
                    autoExpand((int) Math.ceil(in.remaining() * encoder.maxBytesPerChar()));
                    expandedState++;
                    break;
                default:
                    throw new RuntimeException("Expanded by "
                            + (int) Math.ceil(in.remaining() * encoder.maxBytesPerChar())
                            + " but that wasn't enough for '" + val + "'");
                }
                continue;
            }
        } else {
            expandedState = 0;
        }
        cr.throwException();
    }
    return this;
}
 
開發者ID:eclipse,項目名稱:neoscada,代碼行數:51,代碼來源:AbstractIoBuffer.java

示例12: convert

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
/**
 * Convert the given bytes to characters.
 * 
 * @param bc
 *            byte input
 * @param cc
 *            char output
 * @param endOfInput
 *            Is this all of the available data
 */
public void convert(ByteChunk bc, CharChunk cc, boolean endOfInput) throws IOException {
	if ((bb == null) || (bb.array() != bc.getBuffer())) {
		// Create a new byte buffer if anything changed
		bb = ByteBuffer.wrap(bc.getBuffer(), bc.getStart(), bc.getLength());
	} else {
		// Initialize the byte buffer
		bb.limit(bc.getEnd());
		bb.position(bc.getStart());
	}
	if ((cb == null) || (cb.array() != cc.getBuffer())) {
		// Create a new char buffer if anything changed
		cb = CharBuffer.wrap(cc.getBuffer(), cc.getEnd(), cc.getBuffer().length - cc.getEnd());
	} else {
		// Initialize the char buffer
		cb.limit(cc.getBuffer().length);
		cb.position(cc.getEnd());
	}
	CoderResult result = null;
	// Parse leftover if any are present
	if (leftovers.position() > 0) {
		int pos = cb.position();
		// Loop until one char is decoded or there is a decoder error
		do {
			leftovers.put(bc.substractB());
			leftovers.flip();
			result = decoder.decode(leftovers, cb, endOfInput);
			leftovers.position(leftovers.limit());
			leftovers.limit(leftovers.array().length);
		} while (result.isUnderflow() && (cb.position() == pos));
		if (result.isError() || result.isMalformed()) {
			result.throwException();
		}
		bb.position(bc.getStart());
		leftovers.position(0);
	}
	// Do the decoding and get the results into the byte chunk and the char
	// chunk
	result = decoder.decode(bb, cb, endOfInput);
	if (result.isError() || result.isMalformed()) {
		result.throwException();
	} else if (result.isOverflow()) {
		// Propagate current positions to the byte chunk and char chunk, if
		// this continues the char buffer will get resized
		bc.setOffset(bb.position());
		cc.setEnd(cb.position());
	} else if (result.isUnderflow()) {
		// Propagate current positions to the byte chunk and char chunk
		bc.setOffset(bb.position());
		cc.setEnd(cb.position());
		// Put leftovers in the leftovers byte buffer
		if (bc.getLength() > 0) {
			leftovers.limit(leftovers.array().length);
			leftovers.position(bc.getLength());
			bc.substract(leftovers.array(), 0, bc.getLength());
		}
	}
}
 
開發者ID:how2j,項目名稱:lazycat,代碼行數:68,代碼來源:B2CConverter.java

示例13: convert

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
/**
 * Convert the given bytes to characters.
 * 
 * @param bc byte input
 * @param cc char output
 * @param endOfInput    Is this all of the available data
 */
public void convert(ByteChunk bc, CharChunk cc, boolean endOfInput)
        throws IOException {
    if ((bb == null) || (bb.array() != bc.getBuffer())) {
        // Create a new byte buffer if anything changed
        bb = ByteBuffer.wrap(bc.getBuffer(), bc.getStart(), bc.getLength());
    } else {
        // Initialize the byte buffer
        bb.limit(bc.getEnd());
        bb.position(bc.getStart());
    }
    if ((cb == null) || (cb.array() != cc.getBuffer())) {
        // Create a new char buffer if anything changed
        cb = CharBuffer.wrap(cc.getBuffer(), cc.getEnd(), 
                cc.getBuffer().length - cc.getEnd());
    } else {
        // Initialize the char buffer
        cb.limit(cc.getBuffer().length);
        cb.position(cc.getEnd());
    }
    CoderResult result = null;
    // Parse leftover if any are present
    if (leftovers.position() > 0) {
        int pos = cb.position();
        // Loop until one char is decoded or there is a decoder error
        do {
            leftovers.put(bc.substractB());
            leftovers.flip();
            result = decoder.decode(leftovers, cb, endOfInput);
            leftovers.position(leftovers.limit());
            leftovers.limit(leftovers.array().length);
        } while (result.isUnderflow() && (cb.position() == pos));
        if (result.isError() || result.isMalformed()) {
            result.throwException();
        }
        bb.position(bc.getStart());
        leftovers.position(0);
    }
    // Do the decoding and get the results into the byte chunk and the char
    // chunk
    result = decoder.decode(bb, cb, endOfInput);
    if (result.isError() || result.isMalformed()) {
        result.throwException();
    } else if (result.isOverflow()) {
        // Propagate current positions to the byte chunk and char chunk, if
        // this continues the char buffer will get resized
        bc.setOffset(bb.position());
        cc.setEnd(cb.position());
    } else if (result.isUnderflow()) {
        // Propagate current positions to the byte chunk and char chunk
        bc.setOffset(bb.position());
        cc.setEnd(cb.position());
        // Put leftovers in the leftovers byte buffer
        if (bc.getLength() > 0) {
            leftovers.limit(leftovers.array().length);
            leftovers.position(bc.getLength());
            bc.substract(leftovers.array(), 0, bc.getLength());
        }
    }
}
 
開發者ID:liaokailin,項目名稱:tomcat7,代碼行數:67,代碼來源:B2CConverter.java

示例14: decode

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
static Result decode(Charset cs, byte[] ba, int off, int len) {
    // (1)We never cache the "external" cs, the only benefit of creating
    // an additional StringDe/Encoder object to wrap it is to share the
    // de/encode() method. These SD/E objects are short-lived, the young-gen
    // gc should be able to take care of them well. But the best approach
    // is still not to generate them if not really necessary.
    // (2)The defensive copy of the input byte/char[] has a big performance
    // impact, as well as the outgoing result byte/char[]. Need to do the
    // optimization check of (sm==null && classLoader0==null) for both.
    // (3)There might be a timing gap in isTrusted setting. getClassLoader0()
    // is only checked (and then isTrusted gets set) when (SM==null). It is
    // possible that the SM==null for now but then SM is NOT null later
    // when safeTrim() is invoked...the "safe" way to do is to redundant
    // check (... && (isTrusted || SM == null || getClassLoader0())) in trim
    // but it then can be argued that the SM is null when the operation
    // is started...
    if (cs == UTF_8) {
        return StringDecoderUTF8.decode(ba, off, len, new Result());
    }
    CharsetDecoder cd = cs.newDecoder();
    // ascii fastpath
    if (cs == ISO_8859_1 || ((cd instanceof ArrayDecoder) &&
                             ((ArrayDecoder)cd).isASCIICompatible() &&
                             !hasNegatives(ba, off, len))) {
         if (COMPACT_STRINGS) {
             return new Result().with(Arrays.copyOfRange(ba, off, off + len),
                                      LATIN1);
         } else {
             return new Result().with(StringLatin1.inflate(ba, off, len), UTF16);
         }
    }
    int en = scale(len, cd.maxCharsPerByte());
    if (len == 0) {
        return new Result().with();
    }
    if (cs.getClass().getClassLoader0() != null &&
        System.getSecurityManager() != null) {
        ba =  Arrays.copyOfRange(ba, off, off + len);
        off = 0;
    }
    cd.onMalformedInput(CodingErrorAction.REPLACE)
      .onUnmappableCharacter(CodingErrorAction.REPLACE)
      .reset();

    char[] ca = new char[en];
    if (cd instanceof ArrayDecoder) {
        int clen = ((ArrayDecoder)cd).decode(ba, off, len, ca);
        return new Result().with(ca, 0, clen);
    }
    ByteBuffer bb = ByteBuffer.wrap(ba, off, len);
    CharBuffer cb = CharBuffer.wrap(ca);
    try {
        CoderResult cr = cd.decode(bb, cb, true);
        if (!cr.isUnderflow())
            cr.throwException();
        cr = cd.flush(cb);
        if (!cr.isUnderflow())
            cr.throwException();
    } catch (CharacterCodingException x) {
        // Substitution is always enabled,
        // so this shouldn't happen
        throw new Error(x);
    }
    return new Result().with(ca, 0, cb.position());
}
 
開發者ID:AdoptOpenJDK,項目名稱:openjdk-jdk10,代碼行數:66,代碼來源:StringCoding.java

示例15: read

import java.nio.charset.CoderResult; //導入方法依賴的package包/類
@Override
public int read(byte[] b, int off, int len) throws IOException {
    // Obey InputStream contract.
    if (len == 0) {
        return 0;
    }

    // The rest of this method implements the process described by the CharsetEncoder javadoc.
    int totalBytesRead = 0;
    boolean doneEncoding = endOfInput;

    DRAINING:
    while (true) {
        // We stay in draining mode until there are no bytes left in the output buffer. Then we go
        // back to encoding/flushing.
        if (draining) {
            totalBytesRead += drain(b, off + totalBytesRead, len - totalBytesRead);
            if (totalBytesRead == len || doneFlushing) {
                return (totalBytesRead > 0) ? totalBytesRead : -1;
            }
            draining = false;
            byteBuffer.clear();
        }

        while (true) {
            // We call encode until there is no more input. The last call to encode will have endOfInput
            // == true. Then there is a final call to flush.
            CoderResult result;
            if (doneFlushing) {
                result = CoderResult.UNDERFLOW;
            } else if (doneEncoding) {
                result = encoder.flush(byteBuffer);
            } else {
                result = encoder.encode(charBuffer, byteBuffer, endOfInput);
            }

            if (result.isOverflow()) {
                // Not enough room in output buffer--drain it, creating a bigger buffer if necessary.
                startDraining(true);
                continue DRAINING;
            } else if (result.isUnderflow()) {
                // If encoder underflows, it means either:
                // a) the final flush() succeeded; next drain (then done)
                // b) we encoded all of the input; next flush
                // c) we ran of out input to encode; next read more input
                if (doneEncoding) { // (a)
                    doneFlushing = true;
                    startDraining(false);
                    continue DRAINING;
                } else if (endOfInput) { // (b)
                    doneEncoding = true;
                } else { // (c)
                    readMoreChars();
                }
            } else if (result.isError()) {
                // Only reach here if a CharsetEncoder with non-REPLACE settings is used.
                result.throwException();
                return 0; // Not called.
            }
        }
    }
}
 
開發者ID:FastBootWeixin,項目名稱:FastBootWeixin,代碼行數:63,代碼來源:ReaderInputStream.java


注:本文中的java.nio.charset.CoderResult.isUnderflow方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。