| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * @author Vladimir N. Molotkov |
| * @version $Revision$ |
| */ |
| |
| package org.apache.harmony.security.utils; |
| |
| |
| /** |
| * Utility class for arrays |
| * |
| */ |
| public class Array { |
| |
| // No instances of this class |
| private Array() { |
| } |
| |
| public static String getBytesAsString(byte[] data) { |
| StringBuilder result = new StringBuilder(data.length * 3); |
| for (int i = 0; i < data.length; ++i) { |
| result.append(Byte.toHexString(data[i], false)); |
| result.append(' '); |
| } |
| return result.toString(); |
| } |
| |
| /** |
| * Represents <code>array</code> as <code>String</code> |
| * for printing. Array length can be up to 32767 |
| * |
| * @param array to be represented as <code>String</code> |
| * |
| * @return <code>String</code> representation of the <code>array</code> |
| */ |
| public static String toString(byte[] array, String prefix) { |
| // Prefixes to be added to the offset values |
| // in <code>String toString(byte[], String)</code> method |
| final String[] offsetPrefix = { |
| "", |
| "000", |
| "00", |
| "0", |
| "" |
| }; |
| StringBuilder sb = new StringBuilder(); |
| StringBuilder charForm = new StringBuilder(); |
| int i=0; |
| for (i=0; i<array.length; i++) { |
| if (i%16 == 0) { |
| sb.append(prefix); |
| // put offset |
| String offset = Integer.toHexString(i); |
| sb.append(offsetPrefix[offset.length()]); |
| sb.append(offset); |
| // clear char form for new line |
| charForm.delete(0, charForm.length()); |
| } |
| // put delimiter |
| sb.append(' '); |
| // put current byte |
| sb.append(Byte.toHexString(array[i], false)); |
| // form character representation part |
| int currentByte = (0xff & array[i]); |
| char currentChar = (char)(currentByte & 0xffff); |
| // FIXME if needed (how to distinguish PRINTABLE chars?) |
| charForm.append( |
| (Character.isISOControl(currentChar) ? '.' : currentChar)); |
| // Add additional delimiter for each 8 values |
| if ((i+1)%8 == 0) { |
| sb.append(' '); |
| } |
| // Add character representation for each line |
| if ((i+1)%16 == 0) { |
| sb.append(' '); |
| sb.append(charForm.toString()); |
| sb.append('\n'); |
| } |
| } |
| // form last line |
| if (i%16 != 0) { |
| int ws2add = 16 - i%16; |
| for (int j=0; j<ws2add; j++) { |
| sb.append(" "); |
| } |
| if (ws2add > 8) { |
| sb.append(' '); |
| } |
| sb.append(" "); |
| sb.append(charForm.toString()); |
| sb.append('\n'); |
| } |
| return sb.toString(); |
| } |
| } |