private static byte[][] splitWorker(byte[] str, byte separatorChar,
			boolean preserveAllTokens) {
		// Performance tuned for 2.0 (JDK1.4)

		if (str == null) {
			return null;
		}
		int len = str.length;
		if (len == 0) {
			return ArrayKit.EMPTY_BYTE_ARRAY_ARRAY;
		}
		List<byte[]> list = new ArrayList<byte[]>();
		int i = 0, start = 0;
		boolean match = false;
		boolean lastMatch = false;
		while (i < len) {
			if (str[i] == separatorChar) {
				if (match || preserveAllTokens) {
					byte[] tmp = new byte[i - start];
					System.arraycopy(str, start, tmp, 0, tmp.length);
					list.add(tmp);
					match = false;
					lastMatch = true;
				}
				start = ++i;
				continue;
			}
			lastMatch = false;
			match = true;
			i++;
		}
		if (match || (preserveAllTokens && lastMatch)) {
			byte[] tmp = new byte[i - start];
			System.arraycopy(str, start, tmp, 0, tmp.length);
			list.add(tmp);
		}
		return list.toArray(new byte[list.size()][]);
	}