Bom dia a todos…
Preciso determinar o tamanho de uma string e grava-lo em formato binário, esse tamanho em binário será concatenado no inicio da String que será enviada via socket.
O problema é que dependendo do tamanho da string, digamos qualquer tamanho entre 128 e 159, quando ele é recuperado pelo código de destino, ele entende como 63.
O código abaixo recebe uma string do prompt e grava em disco, fazendo exatamente o que descrevi acima, o mesmo código abre o arquivo e recupera o tamanho. Passando como parametro uma string de até 127 o tamanho será mostrado corretamente, acima disso e até 159 dará problema.
import java.io.*;
public class TesteBin{
public static void main(String[] args)throws Exception{
// GRAVAÇÃO
//pega o texto passado como parametro
StringBuffer sb = new StringBuffer(args[0]);
int axLen = sb.length(); // Determina o tamanho do parametro
int h = (axLen / 256); // Calcula o byte “alto”
int l = axLen - (h * 256); // Calcula o byte “baixo”
sb.insert(0 , (char) l); // Concatena
sb.insert(0 , (char) h); // Concatena
FileWriter out = new FileWriter(“teste.txt”); //cria o stream para o arquivo de saida
//escreve e fecha o arquivo
out.write(sb + “”);
out.close();
// LEITURA
BufferedReader in = new BufferedReader(new FileReader(“teste.txt”));
String temp = in.readLine();
//pega o primeiro char, transforma em int, recuperando o tamanho
System.out.println(“Tamanho:[” + (int) temp.charAt(0) + “]”);
System.out.println(“Tamanho:[” + (int) temp.charAt(1) + “]”);
//pega o resto da string e escreve na tela
System.out.println(“String:[” + temp.substring(2, temp.length()) + “]”);
}
}
Abaixo segue outro código, ele apresenta na tela uma sequencia de caracteres e os códigos pelos quais são representados, nele é possível ver a faixa problemática e também é possível ver que existem outras. No final desse código eu mostro o caracter ? e o seu byte, vejam que o número é 63, ou seja, grosseiramente falando o meu tamanho binário está sendo transformado no simbolo interração e quando ele é lido o código destino apresenta o código desse simbolo, no caso 63.
public class teste7 {
public static void main(String[] args) {
for (int i=100; i<200; i++) {
int teste = i;
int teste2 = 100 + i;
char a = (char)teste;
char b = (char)teste2;
System.out.print("Int: " + teste + " - " + a + " | ");
System.out.print("Int: " + teste2 + " - " + b);
System.out.println();
}
System.out.println("=============================");
System.out.println("? = " + (char)63 );
}
}
Resumindo: Preciso fazer com que o “destino” entenda que o número, digamos 130, é 130 e não 63. Preciso que o número binário não seja interpretado pelo simbolo que ele representa.
Acho que a solução é simples, mas como o tamanho das strings produzidas é variável, só descobri o problema no dia D e hora H e por isso recorro a vocês, caso alguém já tenha enfrentado esse problema e já tenha uma solução.
Agradeço desde já.