📄 helper.java
字号:
/* Construct a new instance */ return (StreamWriter)clazz.newInstance(); } catch(ClassNotFoundException x) { throw new UnsupportedEncodingException("Encoding "+name+" not found"); } catch(InstantiationException x) { throw new RuntimeException("InstantiationException "+x.getMessage()); } catch(IllegalAccessException x) { throw new RuntimeException("IllegalAccessException "+x.getMessage()); } catch(ClassCastException x) { throw new RuntimeException("ClassCastException "+x.getMessage()); } } /** * Convert a byte array to a char array * * @param buffer The byte array buffer * @param offset The offset * @param length The length * @return A new char array */ public static char[] byteToCharArray(byte[] buffer, int offset, int length) { try { return byteToCharArray(buffer, offset, length, defaultEncoding); } catch(UnsupportedEncodingException x) { throw new RuntimeException("Missing default encoding "+defaultEncoding); } } /** * Convert a char array to a byte array * * @param buffer The char array buffer * @param offset The offset * @param length The length * @return A new byte array */ public static byte[] charToByteArray(char[] buffer, int offset, int length) { try { return charToByteArray(buffer, offset, length, defaultEncoding); } catch(UnsupportedEncodingException x) { throw new RuntimeException("Missing default encoding "+defaultEncoding); } } /* * Cached variables for byteToCharArray */ private static String lastReaderEncoding; private static StreamReader lastReader; /** * Convert a byte array to a char array * * @param buffer The byte array buffer * @param offset The offset * @param length The length * @param enc The character encoding * @return A new char array * @exception UnsupportedEncodingException If the encoding is not known */ public static synchronized char[] byteToCharArray(byte[] buffer, int offset, int length, String enc) throws UnsupportedEncodingException { if (offset < 0) { throw new IndexOutOfBoundsException(Integer.toString(offset)); } if (length < 0) { throw new IndexOutOfBoundsException(Integer.toString(length)); } // Note: offset or length might be near -1>>>1. if (offset > buffer.length - length) { throw new IndexOutOfBoundsException( Integer.toString(offset + length)); } /* If we don't have a cached reader then make one */ if(lastReaderEncoding == null || !lastReaderEncoding.equals(enc)) { lastReader = getStreamReaderPrim(enc); lastReaderEncoding = enc; } /* Ask the reader for the size the output will be */ int size = lastReader.sizeOf(buffer, offset, length); /* Allocate a buffer of that size */ char[] outbuf = new char[size]; /* Open the reader on a ByteArrayInputStream */ lastReader.open(new ByteArrayInputStream(buffer, offset, length), enc); try { /* Read the input */ lastReader.read(outbuf, 0, size); /* Close the reader */ lastReader.close(); } catch(IOException x) { throw new RuntimeException("IOException reading reader "+x.getMessage()); } /* And return the buffer */ return outbuf; } /* * Cached variables for charToByteArray */ private static String lastWriterEncoding; private static StreamWriter lastWriter; /** * Convert a char array to a byte array * * @param buffer The char array buffer * @param offset The offset * @param length The length * @param enc The character encoding * @return A new byte array * @exception UnsupportedEncodingException If the encoding is not known */ public static synchronized byte[] charToByteArray(char[] buffer, int offset, int length, String enc) throws UnsupportedEncodingException { /* If we don't have a cached writer then make one */ if(lastWriterEncoding == null || !lastWriterEncoding.equals(enc)) { lastWriter = getStreamWriterPrim(enc); lastWriterEncoding = enc; } /* Ask the writeer for the size the output will be */ int size = lastWriter.sizeOf(buffer, offset, length); /* Get the output stream */ ByteArrayOutputStream os = new ByteArrayOutputStream(size); /* Open the writer */ lastWriter.open(os, enc); try { /* Convert */ lastWriter.write(buffer, offset, length); /* Close the writer */ lastWriter.close(); } catch(IOException x) { throw new RuntimeException("IOException writing writer "+x.getMessage()); } /* Close the output stream */ try { os.close(); } catch(IOException x) {}; /* Return the array */ return os.toByteArray(); } /** * Get the internal name for an encoding. * * @param encodingName encoding name * * @return internal name for this encoding */ private static String internalNameForEncoding(String encodingName) { String internalName; String property; internalName = normalizeEncodingName(encodingName); // The preferred mime name according to the IANA Charset Registry. if (internalName.equals("US_ASCII")) { /* * US-ASCII is subclass of ISO-8859-1 so we do not need a * separate reader for it. */ return "ISO8859_1"; } // The preferred mime name according to the IANA Charset Registry. if (internalName.equals("ISO_8859_1")) { return "ISO8859_1"; } /* * Since IANA character encoding names can start with a digit * and that some Reader class names that do not match the standard * name, we have a way to configure alternate names for encodings. * * Note: The names must normalized, digits, upper case only with "_" * and "_" substituted for ":" and "-". */ property = System.getProperty(internalName + "_InternalEncodingName"); if (property != null) { return property; } return internalName; } /** * Converts "-" and ":" in a string to "_" and converts the name * to upper case. * This is needed because the names of IANA character encodings have * characters that are not allowed for java class names and * IANA encoding names are not case sensitive. * * @param encodingName encoding name * * @return normalized name */ private static String normalizeEncodingName(String encodingName) { StringBuffer normalizedName ; char currentChar; normalizedName = new StringBuffer(encodingName); for (int i = 0; i < normalizedName.length(); i++) { currentChar = normalizedName.charAt(i); if (currentChar == '-' || currentChar == ':') { normalizedName.setCharAt(i, '_'); } else { normalizedName.setCharAt(i, Character.toUpperCase(currentChar)); } } return normalizedName.toString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -