2016-04-09 17 views
0

Ich versuche, eine Binärzahl Zeichenfolge in eine Datei mit Bytes zu komprimieren. Unten ist mein Versuch, diese Zeichenfolge zu konvertieren, indem Teilstrings der Länge 8 abgerufen und versucht, diese 8 Zeichen in einem einzigen Byte zu machen. Grundsätzlich macht jedes Zeichen ein bisschen. Bitte lassen Sie mich wissen, ob es einen besseren Weg gibt. Ich darf keine speziellen Bibliotheken verwenden.Wie 8 Zeichenfolge in ein einzelnes Byte zu einem Zeitpunkt konvertieren, um in Datei in Java zu schreiben?

Encode

public static void encode(FileOutputStream C) throws IOException{ 

    String binaryString = "1001010100011000010010101011"; 
    String temp = new String(); 

    for(int i=0; i<binaryString.length(); i++){ 
     temp += binaryString.charAt(i); 

     // once I get 8 character substring I write this to file 
     if(temp.length() == 8){ 
      byte value = (byte) Integer.parseInt(temp,2); 
      C.write(value); 
      temp = ""; 
     } 
     // remaining character substring is written to file 
     else if(i == binaryString.length()-1){ 
      byte value = Byte.parseByte(temp, 2); 
      C.write(value); 
      temp = ""; 
     } 
    } 
    C.close(); 
} 

Decode

Path path = Paths.get(args[0]); 
byte[] data = Files.readAllBytes(path); 

for (byte bytes : data){ 
    String x = Integer.toString(bytes, 2); 
} 

Dies sind die Teil, dass ich kodieren:

10010101 
00011000 
01001010 
1011 

Leider wenn ich dekodieren erhalte ich die folgende:

-1101011 
11000 
1001010 
1011 

Antwort

3

Ich würde verwenden die folgende

public static void encode(FileOutputStream out, String text) throws IOException { 
    for (int i = 0; i < text.length() - 7; i += 8) { 
     String byteToParse = text.substring(i, Math.min(text.length(), i + 8)); 
     out.write((byte) Integer.parse(byteToParse, 2)); 
    } 
    // caller created the out so should be the one to close it. 
} 

aus der Datei

Path path = Paths.get(args[0]); 
byte[] data = Files.readAllBytes(path); 

for (byte b : data) { 
    System.out.println(Integer.toString(b & 0xFF, 2)); 
} 
1

Scheck zu drucken, wenn das ist, was Sie suchen:

Byte bt = (byte)(int)Integer.valueOf("00011000", 2); 
System.out.println(bt); 
System.out.println(String.format("%8s",Integer.toBinaryString((bt+256)%256)).replace(' ', '0'));