📄 stringutils.java
字号:
/* Copyright (C) 2002-2004 MySQL AB This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. There are special exceptions to the terms and conditions of the GPL as it is applied to this software. View the full text of the exception exception in file EXCEPTIONS-CONNECTOR-J in the directory of this software distribution. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package com.mysql.jdbc;import java.io.ByteArrayOutputStream;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;/** * Various utility methods for converting to/from byte arrays in the platform * encoding * * @author Mark Matthews */public class StringUtils { private static final int BYTE_RANGE = (1 + Byte.MAX_VALUE) - Byte.MIN_VALUE; private static byte[] allBytes = new byte[BYTE_RANGE]; private static char[] byteToChars = new char[BYTE_RANGE]; static { for (int i = Byte.MIN_VALUE; i <= Byte.MAX_VALUE; i++) { allBytes[i - Byte.MIN_VALUE] = (byte) i; } String allBytesString = new String(allBytes, 0, Byte.MAX_VALUE - Byte.MIN_VALUE); int allBytesStringLen = allBytesString.length(); for (int i = 0; (i < (Byte.MAX_VALUE - Byte.MIN_VALUE)) && (i < allBytesStringLen); i++) { byteToChars[i] = allBytesString.charAt(i); } } /** * Returns the byte[] representation of the given string using given * encoding. * * @param s the string to convert * @param encoding the character encoding to use * @param serverEncoding DOCUMENT ME! * @param parserKnowsUnicode DOCUMENT ME! * * @return byte[] representation of the string * * @throws UnsupportedEncodingException if an encoding unsupported by the * JVM is supplied. */ public static final byte[] getBytes(String s, String encoding, String serverEncoding, boolean parserKnowsUnicode) throws UnsupportedEncodingException { SingleByteCharsetConverter converter = SingleByteCharsetConverter .getInstance(encoding); return getBytes(s, converter, encoding, serverEncoding, parserKnowsUnicode); } /** * Returns the byte[] representation of the given string (re)using the * given charset converter, and the given encoding. * * @param s the string to convert * @param converter the converter to reuse * @param encoding the character encoding to use * @param serverEncoding DOCUMENT ME! * @param parserKnowsUnicode DOCUMENT ME! * * @return byte[] representation of the string * * @throws UnsupportedEncodingException if an encoding unsupported by the * JVM is supplied. */ public static final byte[] getBytes(String s, SingleByteCharsetConverter converter, String encoding, String serverEncoding, boolean parserKnowsUnicode) throws UnsupportedEncodingException { byte[] b = null; if (converter != null) { b = converter.toBytes(s); } else if (encoding == null) { b = s.getBytes(); } else { b = s.getBytes(encoding); if (!parserKnowsUnicode && (encoding.equalsIgnoreCase("SJIS") || encoding.equalsIgnoreCase("BIG5") || encoding.equalsIgnoreCase("GBK"))) { if (!encoding.equalsIgnoreCase(serverEncoding)) { b = escapeEasternUnicodeByteStream(b, s, 0, s.length()); } } } return b; } /** * DOCUMENT ME! * * @param s DOCUMENT ME! * @param converter DOCUMENT ME! * @param encoding DOCUMENT ME! * @param serverEncoding DOCUMENT ME! * @param offset DOCUMENT ME! * @param length DOCUMENT ME! * @param parserKnowsUnicode DOCUMENT ME! * * @return DOCUMENT ME! * * @throws UnsupportedEncodingException DOCUMENT ME! */ public static final byte[] getBytes(String s, SingleByteCharsetConverter converter, String encoding, String serverEncoding, int offset, int length, boolean parserKnowsUnicode) throws UnsupportedEncodingException { byte[] b = null; if (converter != null) { b = converter.toBytes(s, offset, length); } else if (encoding == null) { byte[] temp = s.getBytes(); b = new byte[length]; System.arraycopy(temp, offset, b, 0, length); } else { byte[] temp = s.getBytes(encoding); b = new byte[length]; System.arraycopy(temp, offset, b, 0, length); if (!parserKnowsUnicode && (encoding.equalsIgnoreCase("SJIS") || encoding.equalsIgnoreCase("BIG5") || encoding.equalsIgnoreCase("GBK"))) { if (!encoding.equalsIgnoreCase(serverEncoding)) { b = escapeEasternUnicodeByteStream(b, s, offset, length); } } } return b; } /** * Dumps the given bytes to STDOUT as a hex dump (up to length bytes). * * @param byteBuffer the data to print as hex * @param length the number of bytes to print */ public static final void dumpAsHex(byte[] byteBuffer, int length) { int p = 0; int rows = length / 8; for (int i = 0; i < rows; i++) { int ptemp = p; for (int j = 0; j < 8; j++) { String hexVal = Integer.toHexString((int) byteBuffer[ptemp] & 0xff); if (hexVal.length() == 1) { hexVal = "0" + hexVal; } System.out.print(hexVal + " "); ptemp++; } System.out.print(" "); for (int j = 0; j < 8; j++) { if ((byteBuffer[p] > 32) && (byteBuffer[p] < 127)) { System.out.print((char) byteBuffer[p] + " "); } else { System.out.print(". "); } p++; } System.out.println(); } int n = 0; for (int i = p; i < length; i++) { String hexVal = Integer.toHexString((int) byteBuffer[i] & 0xff); if (hexVal.length() == 1) { hexVal = "0" + hexVal; } System.out.print(hexVal + " "); n++; } for (int i = n; i < 8; i++) { System.out.print(" "); } System.out.print(" "); for (int i = p; i < length; i++) { if ((byteBuffer[i] > 32) && (byteBuffer[i] < 127)) { System.out.print((char) byteBuffer[i] + " "); } else { System.out.print(". "); } } System.out.println(); } /** * Returns the bytes as an ASCII String. * * @param buffer the bytes representing the string * * @return The ASCII String. */ public static final String toAsciiString(byte[] buffer) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -