Link to home
Start Free TrialLog in
Avatar of mzimmer74
mzimmer74

asked on

Reading/Writing binary files

Hey all,
I've been fighting with this problem for a few days and to be honest I'm quite confused as to what's
going on.  Here's the scenario...I'm taking a binary file, reading it in to a char[] buffer, looking
for a particular sequence of characters, changing that sequence to a new sequence (of the same length),
and writing the buffer out to a new file.  I then am opening up the two files in a hex editor to see
if my changes worked properly.  

Here's where it gets interesting.  Upon looking through the file, I find that the sequence I want to
change did get changed properly.  However, there are some other changes that were made that shouldn't
have been.

The following list of hex values are being incorrectly changed to "3F" (every instance of them...not
just one or two):
81
8D
8F
90
9D

Now, when printing out what characters those are, I see that they are some of the "unprintable characters"
(ie '?').  However, a number of other unprintable characters don't get changed to 3F.  For example,
the following are left alone:
82
80
83
84
85
93
94
95

Also, I know for a fact that this isn't an off by one error, as I'm reading in 8192 bytes at a time,
and writing them out.  Since the test file I'm working on only takes 2 reads and writes, and there are
significantly more changes than that, I'm pretty sure that I'm not just losing the last character in
my buffer or anything like that.

Does anybody have any idea what's going on here?  I'm using BufferedReader and BufferedWriter for the
read/write operations (also tried FileReader/Writer).  I suspect there is some kind of bad conversion
happening between read and write, but not sure what.

Oh yeah, one other thing.  I've tried just reading and immediately writing without changing anything
in the buffer and got the same results, so I'm fairly sure it's not in my conversion method.

After fighting with this whole problem for a while, I've tried using RandomAccessFile instead and reading in bytes.  Haven't fully gotten that to work, but I'm hopeful.  However, I'm still really curious as to why the aforementioned problem is happening.  Thanks for any help.
Avatar of jerch
jerch

Can you post your code?
ASKER CERTIFIED SOLUTION
Avatar of m_onkey_boy
m_onkey_boy

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of mzimmer74

ASKER

Thanks.  I wondered if this might be the case, and am glad to see that I wasn't just losing my mind.
I'm having a very similar problem but I'm really stuck at the moment because I can't see a way around it.
The problem I'm having is that I'm receiving data in DatagramPackets that I write to a file using a FileOutputStream, but I think that the DatagramPacket object I use to receive the packet is causing the problem.  The payload of the packet seems to have the conversion already applied.  Is there any way I can stop this from happening.
Thanks,
Stef
I think there may be another problem with crap OS's Like Windows.  I noticed that whenever a \r is written to a file Windows also writes a \n .  This is very annoying.  I know that in C, one can open a file and add an additional flag (O_BINARY) to keep this from happening.  I've been truing to figure out how to do this in Java.

I wrote a webserver in Java, and it works great for transferring binary formats in every operating system except those designed by Microsoft.