Ajuda com um campo CLOB

Fala galera
tudo certo?

Eu tenho uma rotina em que o usuário cadastra um documento, escolhendo
o arquivo físico referente ao mesmo, ao persistir, eu gravo os bytes do arquivo
em um campo CLOB no Oracle.
Até esse ponto está gravando tudo certo. O meu problema, é quando eu preciso
buscar o conteúdo do campo CLOB e mostrar o conteúdo do arquivo na tela.

Estou fazendo a busca dos bytes e colocando-os em um novo arquivo
com o seguinte trecho de código:

[code]Connection conn = DriverManager.getConnection
(“jdbc:oracle:oci:@192.168.2.96:1521:ORCL”, info);
//info - são as propriedades da minha conexão com o banco de dados, como usuário, senha, entre outros.
conn.setAutoCommit(false);

Statement ps = conn.createStatement();
ResultSet rs = ps.executeQuery(“SELECT CONTEUDO FROM DOCUMENTO WHERE ID = 10”);

while (rs.next()) {
Clob clob = rs.getClob(“CONTEUDO”);
File file = new File(“C:\Teste.pdf”);

InputStream fis = (InputStream)clob.getAsciiStream();
InputStreamReader conversor = new InputStreamReader(fis);
BufferedReader bf = new BufferedReader(conversor);
FileOutputStream out = new FileOutputStream(file);
boolean continua=true; String linha;
while(continua){
	linha = bf.readLine();
	if (linha==null){
		continua=false;
	}else{
		out.write(linha.getBytes());
		//tive que incluir uma quebra de linha depois de cada uma senão ficava tudo na mesma linha e o Adobe Reader não reconhecia como PDF.
		out.write("\n".getBytes());						
	}
}
bf.close();
fis.close();
out.flush();
out.close();

}
[/code]

Depois disso o arquivo criado a partir dos bytes vindos do banco de dados está em branco.
Editei os arquivos pelo Notepad++ e comparei o conteúdo do arquivo original e do arquivo
que foi criado pelo java, e estão praticamente iguais.

Alguém já passou por algo parecido ou sabe como posso resolver isso?

Desde já agradeço.

Cara provavemente esse seu \n ta zuando o barato, eu tentaria ler o arquivo de mais baixo nivel, ao invez de vc criar um BufferedReader (que não é propria para ler bytes), crie buffer de bytes e os leia direto do InputStream com o metodo read, tomando os dividos cuidados que temos que tomar com IO, claro.

Tudo certo Ovelha,
primeiramente obrigado pela ajuda.
Assim, mudei a forma como estou fazendo, como você sugeriu, estou lendo
diretamente do InputStream, mas o que mudei foi que em vez de criar um arquivo
para depois apresentar na tela, estou mandando para a tela diretamente a partir dos
bytes lidos pelo InputStream, mas o conteúdo continua aparecendo em branco.

O meu código ficou assim agora:

while (rs.next()) {
	Clob clob = rs.getClob("CONTEUDO");		
	byte[] dados = new byte[1024*10];
	InputStream fis = (InputStream)clob.getAsciiStream();
				
    int offset = 0;
    int numRead = 0;
    while (offset < dados.length
		&& (numRead=fis.read(dados, offset, dados.length-offset)) >= 0) {
			offset += numRead;
	}
	fis.close();
	/* Este método é responsável por pegar os bytes lidos e apresentar
	 * na tela para o usuário. Recebe por parâmetro os bytes, o mimetype do arquivo, o nome do arquivo
	 * e o FacesContext para saber onde mandar.
	 * Esse método está funcionando corretamente quando o banco de dados é Firebird */
	Arquivo.bytesFromFile(dados, "application/pdf", "ArquivoTeste", fc);
}

Eu não sei mais o que fazer,
estou apanhando disso já faz uma semana.
Agradeço pela ajuda.