Die Wahl des richtigen Streams?

Status
Nicht offen für weitere Antworten.
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

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.io_OutputStream) 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
 

Grizzly

Top Contributor
luckyluke hat gesagt.:
[...]
ist der Aufruf "encode(fin, fout)" so möglich? Ich bekomme immer die Fehlermeldung

base64.java:152: encode(java.io.InputStream,java.io_OutputStream) 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?

Das liegt daran, dass Du ein BufferedReader-Objekt übergibst. BufferedReader ist keine Unterklasse von InputStream. Schau einfach mal Dir die Klasse InputStream in der API Dokumentation von Java an. Dort stehen auch die Unterklassen dabei - zumindest die direkten Unterklassen.

Den Code in der main-Methode solltest Du Dir sowieso nochmal überlegen. So funktioniert das auf keinen Fall. Obwohl mir klar ist, was Du da probiert hast ;) .
 

Grizzly

Top Contributor
Sodele, hab' mir mal die Mühe gemacht und Deine main-Methode neu geschrieben. Dabei ist mir aufgefallen, dass Dein Programm - zumindest so wie es da steht - eigentlich gar nicht funktionieren kann. Du greifst nämlich auf eine nicht-statische Methode aus der statischen Methode main zu. Das kann bzw. darf eigentlich gar nicht funktionieren.

Code:
	public static void main(final String[] args) {
		PipedInputStream pis;
		PipedOutputStream pos;
		PrintWriter pw;
		Base64 base64;
		
		// Base64 Objekt erzeugen.
		base64 = new Base64();
		try {
			// Einen PipedStream erstellen.
			pis = new PipedInputStream();
			pos = new PipedOutputStream(pis);
			
			// Zur Bequemlichkeit einen Writer darueberlegen.
			pw = new PrintWriter(pos);
			pw.print("Hallo Lukas, this is a simple base64 encoding test\n");
			pw.flush();
			
			// Encoden, wobei die Ausgabe direkt in die System-Console wandert.
			base64.encode(pis, System.out);
			
			// Alles wieder schliessen.
			pw.close();
			pos.close();
			pis.close();
		} catch (IOException ioe) {
			// Fehler in die System-Console ausgeben.
			ioe.printStackTrace();
		}
	}
 
L

luckyluke

Gast
erstmal vielen vielen Dank, er hat zumindest beim compilieren keinen Fehler mehr ausgegeben ;)

Jedoch gibt er mir noch Exceptions aus, da ich aber noch ein wenig Zeit mit dem Projekt habe, werd ich das noch selber etwas probieren.

Auch hast du recht mit dem statischen/dynamischen Zugriff.

Nochmals vielen Dank
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
J JSP die richtige Wahl Allgemeine Java-Themen 2
S Wahl der Collection, unspezifizierte Elementtypen Allgemeine Java-Themen 4
M den richtigen COM-Port finden Allgemeine Java-Themen 1
T datei auslesen ind der richtigen reihenfolge Allgemeine Java-Themen 2
L RMI Die richtigen Policy-Einstellungen oder einfach Signieren? Allgemeine Java-Themen 3
M Richtigen COM-Port bestimmen Allgemeine Java-Themen 14
S java programm zu einem richtigen programm machen Allgemeine Java-Themen 37
B Dateien mit richtigen Programm öffnen Allgemeine Java-Themen 23
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
Monokuma Lesbarkeit von Streams Allgemeine Java-Themen 6
Monokuma Foreach Schleifen in Streams umändern Allgemeine Java-Themen 23
J Streams Allgemeine Java-Themen 6
LimDul Streams und Exception Allgemeine Java-Themen 8
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
K Lesbarkeit von Streams Allgemeine Java-Themen 5
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
mihe7 Lesbarkeit von Streams Allgemeine Java-Themen 5
N Streams wann .filtern? Allgemeine Java-Themen 2
A Lambda und Streams verstehen Allgemeine Java-Themen 4
J IO Streams Allgemeine Java-Themen 13
M Wie funktionieren parallele Java Streams? Allgemeine Java-Themen 1
R Collections BiPredicate in Java 8 Streams Allgemeine Java-Themen 7
F Umgehen mit übergebenen Streams Allgemeine Java-Themen 3
hdi Überwachen des err-Streams? Allgemeine Java-Themen 8
N read streams umleiten Allgemeine Java-Themen 2
DEvent GZIP Streams und gzip Allgemeine Java-Themen 2
S Streams zusammenfügen Allgemeine Java-Themen 4
J Objekt in Datei speichern mittels Streams Allgemeine Java-Themen 6
F Double mit Streams aus Datei einlesen Allgemeine Java-Themen 3
C in Streams Allgemeine Java-Themen 4
M Sind Streams asynchron? Allgemeine Java-Themen 2
Saxony DOS Konsole und deren Streams Allgemeine Java-Themen 5
B Probleme mit Streams Allgemeine Java-Themen 5
T Zwei Streams verbinden Allgemeine Java-Themen 3
G Video Streams mit Servlets Allgemeine Java-Themen 3
P Streams per Mail mit JavaMailAPI versenden Allgemeine Java-Themen 3
A Streams: merkwürdiges Verhalten Allgemeine Java-Themen 7
A Streams - merkwürdiges Verhalten Allgemeine Java-Themen 2
thE_29 Problem mit Streams Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben