Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / June 2006

Tip: Looking for answers? Try searching our database.

Efficient writable character buffers in Java

Thread view: 
yay_frogs@yahoo.com - 30 Jun 2006 17:43 GMT
My problem: I need to create a buffer that needs a capacity sufficient
to hold a row of 80 characters that will be written out to a file, then
modified, then written out to a file again. In C, this could be done
like:

char linebuf[81];

/* code to insert chars in linebuf; as an example: */
linebuf[0] = 'H';
linebuf[1] = 'i';
linebuf[2] = 0; /* null char to terminate string */

/* write the line */
printf("%s\n", linebuf);   // "Hi" is written out followed by a
newline.

/* modify line buffer again; no need to allocate/delete memory */
linebuf[0] = 'Y';
linebuf[1] = 'o';
linebuf[2] = '!';
linebuf[3] = 0;

/* write the line */
printf("%s\n", linebuf);   // "Yo!" is written out followed by a
newline.

Now my problem is that in Java, I can't figure out how to do this
without allocating new objects. If a use a StringBuffer/StringBuilder
that has a length of 80 characters, there doesn't seem to be a way to
efficiently print only the number of characters that the current row
actually has. (The setLength method creates a new object.) If I use a
char[] in Java then the output routines ignore the terminating null
byte.

There has got to be a way to do this in Java! Thanks for any help.
Matt Humphrey - 30 Jun 2006 18:15 GMT
> My problem: I need to create a buffer that needs a capacity sufficient
> to hold a row of 80 characters that will be written out to a file, then
[quoted text clipped - 29 lines]
> char[] in Java then the output routines ignore the terminating null
> byte.

I'll skip the standard warning against premature optimization because you
seem determined that allocating memory is implicitly inefficient. A key
problem with null-terminated strings, of course, is that you have to keep
iterating to find the end.

What's wrong with

   char [] buffer = new char [81];
   // Fill out the buffer

  writer.write (buffer, 0, lastIndexWritten + 1);

  OR

  writer.write (buffer, 0, positionOfZero(buffer) + 1);

You either already know the length in advance and simply use it when writing
data or you have a little iterator utility function that figures out where
the zero is.  Or just wrap the ordinary write (char) in a loop that stops
after the zero.

Cheers,
Matt Humphrey matth@ivizNOSPAM.com  http://www.iviz.com/
lordy - 30 Jun 2006 18:42 GMT
If I use a
> char[] in Java then the output routines ignore the terminating null
> byte.

Are you sure about that? Are you passing the byte to the output
routines??

Lordy


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.