123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- package gnu.gcj.convert;
- import java.nio.ByteBuffer;
- import java.nio.CharBuffer;
- import java.nio.charset.Charset;
- import java.nio.charset.CharsetEncoder;
- import java.nio.charset.CodingErrorAction;
- import java.nio.charset.CoderResult;
- import gnu.java.nio.charset.EncodingHelper;
- public class CharsetToBytesAdaptor extends UnicodeToBytes
- {
-
- private final CharsetEncoder encoder;
-
- private ByteBuffer outBuf;
-
- private boolean closedEncoder;
-
- private boolean hasBytes;
-
- private boolean finished;
-
- public CharsetToBytesAdaptor(Charset cs)
- {
- this(cs.newEncoder());
- }
-
- public CharsetToBytesAdaptor(CharsetEncoder enc)
- {
- encoder = enc;
-
-
- encoder.onMalformedInput(CodingErrorAction.REPLACE);
- encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
- }
-
- public String getName()
- {
- return EncodingHelper.getOldCanonical(encoder.charset().name());
- }
- public int write (char[] inbuffer, int inpos, int inlength)
- {
-
- CharBuffer b = CharBuffer.wrap(inbuffer, inpos, inlength);
- write(b);
- return b.position() - inpos;
- }
- public int write (String str, int inpos, int inlength, char work)
- {
-
- CharBuffer b = CharBuffer.wrap(str, inpos, inlength);
- write(b);
- return b.position() - inpos;
- }
-
- private void write(CharBuffer inBuf)
- {
-
-
- if (outBuf == null || !outBuf.hasArray() || outBuf.array() != buf)
- outBuf = ByteBuffer.wrap(buf);
-
- outBuf.position(count);
-
- CoderResult result = encoder.encode(inBuf, outBuf, closedEncoder);
- hasBytes = result == CoderResult.OVERFLOW;
- if (closedEncoder)
- {
- result = encoder.flush(outBuf);
- if (result == CoderResult.UNDERFLOW)
- finished = true;
- else
- hasBytes = true;
- }
-
- count = outBuf.position();
- }
-
- public boolean havePendingBytes()
- {
- return hasBytes;
- }
- public void setFinished()
- {
- closedEncoder = true;
- }
-
- public void done()
- {
- }
- }
|