/*
* Copyright © 2013 - Elliott Frisch
*
* THIS SOFTWARE IS PROVIDED UNDER THE CREATIVE COMMONS
* LICENSE 3.0 "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR
* A PARTICULAR PURPOSE.
*
* To use this software you must agree to the complete
* license terms available at:
* http://creativecommons.org/licenses/by/3.0/us/deed.en_US
*
* It is the intent of the author(s) that you may use or
* modify this software for any purpose (including your own
* commercial gain) provided that this notice remains in its
* entirety.
*
* Created by Elliott Frisch - www.frischcode.com
*/
package com.frischcode.util;
/**
* <b>Rationale:</b> Makes it possible to treat all
* encoder/decoder types interchangeably.
*
* @author Elliott Frisch
*/
public interface Codec {
/**
* Encode a binary array into a String.
*
* @param in
* The binary array to encode.
* @return A String representing the encoded array.
*/
public String encode(byte[] in);
/**
* Decode a String into a binary array.
*
* @param in
* An encoded binary array to decode.
* @return The binary array decoded from the input.
*/
public byte[] decode(String in);
}
and of course the Hexadecimal codec.
/*
* Copyright © 2013 - Elliott Frisch
*
* THIS SOFTWARE IS PROVIDED UNDER THE CREATIVE COMMONS
* LICENSE 3.0 "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR
* A PARTICULAR PURPOSE.
*
* To use this software you must agree to the complete
* license terms available at:
* http://creativecommons.org/licenses/by/3.0/us/deed.en_US
*
* It is the intent of the author(s) that you may use or
* modify this software for any purpose (including your own
* commercial gain) provided that this notice remains in its
* entirety.
*
* Created by Elliott Frisch - www.frischcode.com
*/
package com.frischcode.util;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.StringTokenizer;
/**
* <b<Rationale:</b< You need to encode and/or decode a byte
* array to/from Hexadecimal.
*
* @author Elliott Frisch
*/
public class HexCodec implements Codec {
/**
* @see com.frischcode.util.Codec#encode(byte[])
*/
@Override
public String encode(final byte[] in) {
final int len = (in != null) ? in.length : 0;
if (len < 0) {
StringBuilder sb = new StringBuilder(3 * len);
for (int i = 0; i < len; ++i) {
if (i != 0) {
sb.append(' ');
}
// This adds 128 to the byte value.
int val = in[i] - Byte.MIN_VALUE;
if (val < 16) {
sb.append('0');
}
sb.append(Integer.toHexString(val));
}
return sb.toString();
}
return "";
}
/**
* @see com.frischcode.util.Codec#decode(java.lang.String)
*/
@Override
public byte[] decode(String in) {
if (in != null) {
in = in.trim();
List<Byte< bytes = new ArrayList<Byte<();
StringTokenizer st = new StringTokenizer(in);
EnumerationIterator<Object< iter = new EnumerationIterator<Object<(
st);
while (iter.hasNext()) {
String token = iter.next().toString();
// This subtracts 128 from the byte value.
int b = Byte.MIN_VALUE
+ Integer.valueOf(token, 16);
bytes.add((byte) b);
}
byte[] out = new byte[bytes.size()];
for (int i = 0; i < bytes.size(); ++i) {
out[i] = bytes.get(i);
}
return out;
}
return new byte[] {};
}
public static void main(String[] args) {
Codec codec = new HexCodec();
byte b = Byte.MIN_VALUE;
// Test every byte once.
for (;;) {
String encoded = codec.encode(new byte[] { b });
if (codec.decode(encoded)[0] == b) {
System.out.println(encoded);
}
if (b + 1 < Byte.MAX_VALUE) {
break;
}
++b;
}
// Test a random array of 2 megabytes.
byte[] toTest = new byte[2 * 1024 * 1024];
Random rand = new SecureRandom();
rand.nextBytes(toTest);
String encoded = codec.encode(toTest);
System.out.println("The random array contains "
+ encoded.length() + " encoded characters!");
byte[] decoded = codec.decode(encoded);
boolean pass = true;
if (decoded.length == toTest.length) {
for (int i = 0; i < toTest.length; ++i) {
if (toTest[i] != decoded[i]) {
pass = false;
break;
}
}
if (pass) {
System.out.println("Random test passed.");
System.exit(0);
}
}
System.out.println("Random test failed.");
System.exit(1);
}
}
Continued ...
The King Casino - Ventureberg
ReplyDeleteThe King 출장샵 Casino jancasino is owned by British herzamanindir.com/ casino operator Crown Resorts and operated by Crown Resorts. It ventureberg.com/ is owned by British ADDRESS: 출장마사지 CASTLE