blob: 6dd649386960b7a73b4de2b98cc34ffa597bc44a [file] [log] [blame]
Jonathan Hart6df90172014-04-03 10:13:11 -07001package net.onrc.onos.core.datastore.utils;
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -08002
3import java.nio.ByteBuffer;
Yuta HIGUCHIf148aac2014-05-05 14:59:06 -07004import java.nio.ByteOrder;
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -08005
Ray Milkey1584ec82014-04-10 11:58:30 -07006public final class ByteArrayUtil {
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -08007
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -07008 // Suppresses default constructor, ensuring non-instantiability.
Ray Milkey269ffb92014-04-03 14:43:30 -07009 private ByteArrayUtil() {
10 }
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070011
12 /**
Yuta HIGUCHI805bc8f2014-04-16 11:51:43 -070013 * Returns a StringBuilder with each byte in {@code bytes}
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070014 * converted to a String with {@link Integer#toHexString(int)},
15 * separated by {@code sep}.
16 *
17 * @param bytes byte array to convert
Ray Milkey269ffb92014-04-03 14:43:30 -070018 * @param sep separator between each bytes
Yuta HIGUCHI805bc8f2014-04-16 11:51:43 -070019 * @return {@code bytes} converted to a StringBuilder
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070020 */
Yuta HIGUCHI805bc8f2014-04-16 11:51:43 -070021 public static StringBuilder toHexStringBuilder(final byte[] bytes,
Ray Milkey269ffb92014-04-03 14:43:30 -070022 final String sep) {
Yuta HIGUCHI805bc8f2014-04-16 11:51:43 -070023 return toHexStringBuilder(bytes, sep, new StringBuilder());
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -080024 }
25
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070026 /**
Yuta HIGUCHI805bc8f2014-04-16 11:51:43 -070027 * Returns a StringBuilder with each byte in {@code bytes}
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070028 * converted to a String with {@link Integer#toHexString(int)},
29 * separated by {@code sep}.
30 *
31 * @param bytes byte array to convert
Ray Milkey269ffb92014-04-03 14:43:30 -070032 * @param sep separator between each bytes
Yuta HIGUCHI805bc8f2014-04-16 11:51:43 -070033 * @param buf StringBuilder to append to.
Yuta HIGUCHI66ca1bf2014-03-12 18:34:09 -070034 * @return {@code buf}
35 */
Yuta HIGUCHI805bc8f2014-04-16 11:51:43 -070036 public static StringBuilder toHexStringBuilder(final byte[] bytes,
37 final String sep, final StringBuilder buf) {
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070038 if (bytes == null) {
39 return buf;
40 }
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -080041
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070042 ByteBuffer wrap = ByteBuffer.wrap(bytes);
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -080043
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070044 boolean hasWritten = false;
45 while (wrap.hasRemaining()) {
46 if (hasWritten) {
47 buf.append(sep);
48 }
49 buf.append(Integer.toHexString(wrap.get()));
50 hasWritten = true;
51 }
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -080052
Yuta HIGUCHI826b4a42014-03-24 13:10:33 -070053 return buf;
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -080054 }
Yuta HIGUCHIf148aac2014-05-05 14:59:06 -070055
56 /**
57 * Convert {@code value} to Little Endian byte array.
58 *
59 * @param value
60 * @return {@code value} as Little Endian byte array
61 */
62 public static byte[] toLEBytes(final long value) {
63 return ByteBuffer.allocate(8).order(ByteOrder.LITTLE_ENDIAN)
64 .putLong(value).array();
65 }
66
67 /**
68 * Convert Little Endian byte array to long.
69 *
70 * @param value 8 byte Little Endian byte array
71 * @return {@code value} converted to long
72 */
73 public static long fromLEBytes(final byte[] value) {
74 ByteBuffer counter = ByteBuffer.wrap(value).order(ByteOrder.LITTLE_ENDIAN);
75 return counter.getLong();
76 }
Yuta HIGUCHIc9d06ef2014-01-31 15:55:12 -080077}