L
luckyluke
Gast
Zur Einleitung: Ich benötige für ein Projekt die Base64 Encodierung. Ich weiss, dass dies bereits auch in Java integriert worden ist, aber ich denke die Lösung im Moment ist etwas besser. Ich habe ein Code Sniplet benutzt und möchte nun einen String übergeben und den kodierten String auslesen können. So wie ich das im Moment sehe, hab ich wohl den falschen Stream gewählt. Da ich Anfänger bin in Java bräucht ich etwas Hilfe.
Hier nun der Code
ist der Aufruf "encode(fin, fout)" so möglich? Ich bekomme immer die Fehlermeldung
base64.java:152: encode(java.io.InputStream,java.iutputStream) in Base64 cannot be applied to (java.io.BufferedReader,java.io.DataOutputStream)
encode(fin, fout);
^
Ich nahm an, dass dies am falschen Stream liegt, doch welchen sollte ich verwenden?
Vielen Dank schon im Voraus
Lukas Kummer
Hier nun der Code
Code:
import java.io.*;
public class Base64 {
byte[] encinfo =
{
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'+',
'/',
'=' };
int lineCount = 0;
//------------- ENCODE ------------------------------------
private byte[] encoding(byte[] data, int len) {
// Variablen
byte dat;
byte[] temp = new byte[4];
int anzNull = 0;
// Daten
// Auffüllen
anzNull = (3 - len);
if (anzNull > 0) {
for (int i = 0; i < (anzNull); i++) {
data[2 - i] = 0;
}
}
// Änderung der Bytes
temp[0] = new Integer(((data[0] >> 2) & 63)).byteValue();
temp[1] =
new Integer(((data[0] << 4) & 48) | ((data[1] >> 4) & 15))
.byteValue();
temp[2] =
new Integer(((data[1] << 2) & 60) | ((data[2] >> 6) & 3))
.byteValue();
temp[3] = new Integer((data[2]) & 63).byteValue();
// Nullstellen
if (anzNull > 0) {
if (anzNull > 1) {
temp[3] = 64;
temp[2] = 64;
} else {
temp[3] = 64;
}
}
// Rueckgabe
return temp;
}
private byte[] getEncoding(byte[] buffer) {
byte[] data = new byte[buffer.length];
// Umsetzung der Werte
for (int i = 0; i < buffer.length; i++) {
data[i] = encinfo[buffer[i]];
}
return data;
}
private void pressOut(byte[] buffer, OutputStream output)
throws IOException {
for (int i = 0; i < buffer.length; i++) {
if (lineCount == 76) {
output.write('\r');
output.write('\n');
lineCount = 0;
}
output.write(buffer[i]);
lineCount++;
}
}
public void encode(InputStream input, OutputStream output)
throws IOException {
// Variablen
byte buffer[] = new byte[3];
byte codes[] = new byte[4];
int len = 0;
// Daten
while ((len = input.read(buffer, 0, 3)) != -1) {
codes = encoding(buffer, len);
codes = getEncoding(codes);
pressOut(codes, output);
}
}
public static void main(String[] args) {
BufferedReader fin = null;
DataOutputStream fout= null;
fin = new BufferedReader();
fin.writeBytes("Hallo Lukas, this is a simple base64 encoding test\n");
encode(fin, fout);
System.out.println(fout);
}
}
ist der Aufruf "encode(fin, fout)" so möglich? Ich bekomme immer die Fehlermeldung
base64.java:152: encode(java.io.InputStream,java.iutputStream) in Base64 cannot be applied to (java.io.BufferedReader,java.io.DataOutputStream)
encode(fin, fout);
^
Ich nahm an, dass dies am falschen Stream liegt, doch welchen sollte ich verwenden?
Vielen Dank schon im Voraus
Lukas Kummer