|
Scala example source code file (ReplayPrefixOneCharInputStream.java)
The ReplayPrefixOneCharInputStream.java Scala example source codepackage scala.tools.jline.internal; import java.io.IOException; import java.io.InputStream; import java.text.MessageFormat; /** * This is awkward and inefficient, but probably the minimal way to add UTF-8 support to JLine * * @author <a href="mailto:Marc.Herbert@continuent.com">Marc Herbert</a> * @author <a href="mailto:jason@planet57.com">Jason Dillon</a> * @since 2.0 */ public final class ReplayPrefixOneCharInputStream extends InputStream { private byte firstByte; private int byteLength; private InputStream wrappedStream; private int byteRead; private final String encoding; public ReplayPrefixOneCharInputStream(final String encoding) { assert encoding != null; this.encoding = encoding; } public String getEncoding() { return encoding; } public void setInput(final int recorded, final InputStream wrapped) throws IOException { this.byteRead = 0; this.firstByte = (byte) recorded; this.wrappedStream = wrapped; byteLength = 1; if (encoding.equalsIgnoreCase("UTF-8")) { setInputUTF8(recorded, wrapped); } else if (encoding.equalsIgnoreCase("UTF-16")) { byteLength = 2; } else if (encoding.equalsIgnoreCase("UTF-32")) { byteLength = 4; } } public void setInputUTF8(final int recorded, final InputStream wrapped) throws IOException { // 110yyyyy 10zzzzzz if ((firstByte & (byte) 0xE0) == (byte) 0xC0) { this.byteLength = 2; } // 1110xxxx 10yyyyyy 10zzzzzz else if ((firstByte & (byte) 0xF0) == (byte) 0xE0) { this.byteLength = 3; } // 11110www 10xxxxxx 10yyyyyy 10zzzzzz else if ((firstByte & (byte) 0xF8) == (byte) 0xF0) { this.byteLength = 4; } else { throw new IOException(MessageFormat.format("Invalid UTF-8 first byte: {0}", firstByte)); } } public int read() throws IOException { if (available() == 0) { return -1; } byteRead++; if (byteRead == 1) { return firstByte; } return wrappedStream.read(); } /** * InputStreamReader is greedy and will try to read bytes in advance. We * do NOT want this to happen since we use a temporary/"losing bytes" * InputStreamReader above, that's why we hide the real * wrappedStream.available() here. */ public int available() { return byteLength - byteRead; } } Other Scala source code examplesHere is a short list of links related to this Scala ReplayPrefixOneCharInputStream.java source code file: |
... this post is sponsored by my books ... | |
![]() #1 New Release! |
![]() FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.