Compactar em Java sem usar "ZIP"

Pessoal estou com os seguintes problemas:

preciso desenvolver 1 compactador quase que do zero, só que nao posso usar os calsses zips do java posi não quero zipar quéro criar 1 arquivo independente, preciso aplicar algumas lógicas desenvolvidas na faculdade, que nao vem ao caso agora

  1. gostaria de saber como ler os bytecodes dos arquivos e apresentalos em algum lugar para que ai sim eu aplique a logica de compactação desenvolvida.

o maximo q consegui fazer foi transformar um arquivo mp3 em txt dai ele apresentou os bytes criptografados, entao eu copiei linha por linha dentro de um array de String.

depois eu analiseis char por char aplicando a logica de compactação e reescrevi. os próprios ja compactados em outro aquivo. que ficou com cerca de 10% o seu tamanho mas quando eu descompactei e ele voltou normal ficou maior do que era e a musica ficou muito rapida, mas abriu.

por que?
Quando transformo qualquer arquivo de qualquer tipo em txt, leio linha por linha e salvo char por char e outro arquivo ele funciona, mas quando eu altero a ordem e volto ao normal não?

Quem quiser se enterar ao projeto me avise preciso de muita ajuda ainda .

aé o projeto é o seguinte

serve para trasferencia de arquivos pela internet. só que ele compila o arquivo as vezes de 1 gb para 10 mb dependendo o tipo do arquivo dai trasferimos o arquivo bem menos e o clienter o descompacta.

grato pela atenção.

Dica: String != array de bytes, e para ler um arquivo binário (por exemplo, um .MP3), você não pode usar FileReader ou BufferedReader, e sim FileInputStream ou RandomAccessFile. Provavelmente você deve ter tido algum problema porque você pegou um arquivo binário e o leu ou gravou como se fosse um arquivo-texto, destruindo alguma coisa de informação.

é mesmo vc está completamento correto.
mas o mais estranho é q se vc fizer isso:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Manipulador {
String[] s = new String[1000000];
String nome ;
Scanner teclado;

public void leitor() throws IOException {
	teclado = new Scanner(System.in);
	;
	this.nome = teclado.nextLine();
	InputStream is = new FileInputStream(nome);
	InputStreamReader isr = new InputStreamReader(is);
	BufferedReader br = new BufferedReader(isr);
	int str = 0;
	String temp = br.readLine();
	s[str] = temp;
	System.out.println(s[str]);
	while (s[str] != null) {
		temp = br.readLine();
		s[++str] = temp;
		System.out.println(s[str]);
	}

}

public void gravador() throws IOException {
	OutputStream os = new FileOutputStream(this.nome + ".rfc");
	OutputStreamWriter osw = new OutputStreamWriter(os);
	BufferedWriter bw = new BufferedWriter(osw);
	int i = 0;
	while (s[i] != null) {
		int j = 0;
		while (j < s[i].length()) {
			bw.write(s[i].charAt(j));
			j++;
		}
		bw.newLine();
		i++;
	}
	bw.close();

}

}

ele cria o arquivo com o .rfc na frente
ou seja copiou caracter por caracter e adiciono o .rcf na frente
se vc retirar o .rcf renomiando o arquivo para.mp3 ele roda normal “ja testei” ta ai para quem quiser testar.
talvez eu tenha errado a logiga de compactar e descompactar vou refazela hoje. mas funciona utilizando qualquer arquivo como txt até mesmo imagem eu usava isso para dar pau em alguns arquivos. ou quando eu estavo sem zip la no win95 e queria levar coisas grandes cortava ele em textos e juntava no arquivo raiz dp.
É eu sei q é coisa de pedreiro so q funcionava e funciona até hoje.

brigado pela ajuda se tiverem mais idéias eu agradeço

t+

pessoal tem algum geito de ler byte e imprimir byte na tela?
e dp retornar byte do geito q ta na tela