Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.nio.charset.Charset;
- public class RLE{
- private static Byte[] stringToByteArray(String string) {
- byte[] bytes = string.getBytes(Charset.forName("ASCII"));
- Byte[] result = new Byte[bytes.length];
- for(int i = 0; i < bytes.length; i++)
- result[i] = bytes[i];
- return result;
- }
- public static void main(String[] args){
- if(args.length == 0)
- throw new IllegalArgumentException("ร necessรกrio informar a string a ser comprimida.");
- Byte[] data = stringToByteArray(args[0]);
- System.out.println("Entrada......: " + Arrays.toString(data));
- data = compressRLE(data, 2);
- System.out.println("Comprimido...: " + Arrays.toString(data));
- System.out.println("Descomprimido: " + Arrays.toString(decompressRLE(data, 2)));
- }
- private static Byte[] compressRLE(Byte[] data, int n) {
- ArrayList<Byte> result = new ArrayList<Byte>();
- int count = 0;
- Byte last = 0;
- for(Byte b : data) {
- if(b != last || count == 0xFF + n) {
- writeRLE(last, count, n, result);
- last = b;
- count = 1;
- } else {
- count++;
- }
- }
- writeRLE(last, count, n, result);
- return result.toArray(new Byte[result.size()]);
- }
- private static Byte[] decompressRLE(Byte[] data, int n) {
- ArrayList<Byte> result = new ArrayList<Byte>();
- int count = 0;
- Byte last = 0;
- for(Byte b : data) {
- if(count == n) {
- count = b + n;
- for(int i = 0; i < count; i++)
- result.add(last);
- count = 0;
- } else if (b != last) {
- for(int i = 0; i < count; i++)
- result.add(last);
- last = b;
- count = 1;
- } else {
- count++;
- }
- }
- return result.toArray(new Byte[result.size()]);
- }
- private static void writeRLE(Byte b, int count, int n, ArrayList<Byte> result) {
- for(int i = 0; i < Math.min(count, n); i++)
- result.add(b);
- if(count >= n) {
- byte c = (byte)(count-n);
- result.add(c);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement