Estou com um problema e acredito que seja diferenças entre o modo como C++ e Java lêem e escrevem no arquivo:
Estou lendo o arquivo em C++, montando uma ByteMessage e transmitindo a um servidor Java que grava esse arquivo localmente.
Leio da sequinte maneira:
int length;
char * buffer;
ifstream is;
char fullPath [1024] = "";
sprintf(fullPath,"%s/%s",path,fileName);
is.open (fullPath, ios::binary);
if (!is.fail())
{
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
buffer = new char [length];
is.read (buffer,length);//lê todo o arquivo
is.close();
}
BytesMessage* message = session->createBytesMessage((const unsigned char *)buffer,length);//Será enviada por JMS
Aí então a mensagem é enviada. Em Java, após receber a mensagem, gero o arquivo no servidor da seguinte maneira:
BytesMessage bm = (BytesMessage) ((Message)mensagem);//Recebe via JMS
String tmpFile = fileName;//vem por parametro
File file = new File(tmpFile);
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream outBuf = new BufferedOutputStream(fos);
int i;
while((i=bm.readInt())!=-1){//aqui o programa dá erro.
outBuf.write(i);
}
outBuf.close();
fos.close();
o Erro que ocorre é :
16:09:48,673 ERROR [STDERR] Caused by: java.io.EOFException
16:09:48,674 ERROR [STDERR] at java.io.DataInputStream.readInt(DataInputStream.java:375)
16:09:48,674 ERROR [STDERR] at org.apache.activemq.command.ActiveMQBytesMessage.readInt(ActiveMQBytesMessage.java:330)
O problema é que na maioria das vezes em que tento enviar um arquivo ocorre um erro no while com a instrução bm.readInt() enquanto tento gravar o arquivo buffer recebido e o programa dá crash. Suponho que seja problemas de diferença de leitura em c++ e Java mas não tenho certeza. Alguém sabe ou suspeita de algo?