Question

Dynamic Array and Adding Arrays

Asked by: CSecurity

Hello!

I'm reading socket data to an array:

byte[] res = new byte[4096];

while (in.read(res) != -1)

This code gets 4096 byte of inputstream... 2 questions:

1) How can I understand I have data to Xth byte of array contains data and remaining and 0 (no data) -> I should notice that sometimes between data I have 0.

2) How to store all receiving data in an array and finally process them? If needed I can write all receiving data to a temporary file then processing data by reading from file...

please advice...
Thanks alot

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2006-12-15 at 10:54:10ID22094904
Tags

array

,

adding

,

dynamic

Topic

Java Programming Language

Participating Experts
4
Points
500
Comments
39

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Dynamic array in JAVA
    hi! I have an array of bytes, which I am using for reading input from a socket connection. the definition is byte[] buf = new byte[1000]; What I'd like to know is this! How do I create a dynamic array, because I dont know the size of what I am going to receiv...
  2. String to InputStream
    hi, I have a prepared String which I want to bring into an InputStream for functions to do things with - how ? Regards, GOMF
  3. Write an int array to a socket.
    Hi all, I would like to transfer a file between two machines, by writing it to a socket. I've used FileInputStream to read the data into an integer array of bytes, like so: // int count = number of bytes (my previous code works out how many). // String fileS = filename ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: CEHJPosted on 2006-12-15 at 10:56:28ID: 18148118

>>This code gets 4096 byte of inputstream..

It get's *up to* 4096. Assign the result of read to an int. That will tell you how many bytes *were* read

 

by: sciuriwarePosted on 2006-12-15 at 11:12:12ID: 18148225

byte[] total = null;
byte[] extend;
int have;
byte[] res = new byte[4096];
int got;

    while((got = in.read(res)) != -1)
    {
         extend = total;
         have = extend.length;
         total = new byte[have + got];
         for(i = 0; i < have;  ++i)
         {
              total[i] = extend[i];
         }
         for(i = 0;  i < got;  ++i)
         {
              total[have + i] = res[i];
         }
     }

;JOOP!

 

by: sciuriwarePosted on 2006-12-15 at 11:14:52ID: 18148243

Correction:
                     byte[] total = null;
should be:
                     byte[] total = new byte[0];

And:
total      // the growing array
extend   // the place holder while total grows
have     // what is contained in extend
res        // what is read
got        // how much is read.

;JOOP!

 

by: CSecurityPosted on 2006-12-15 at 12:22:36ID: 18148738

for(i = 0; i < have;  ++i)
         {
              total[i] = extend[i];
         }


it will not be slow for processing? Sometimes it can receive 100MB data...

 

by: CSecurityPosted on 2006-12-15 at 12:30:28ID: 18148801

If you have any other suggestion for receiving huge data (this is part of server app's code) please advice..

Thanks

 

by: objectsPosted on 2006-12-15 at 13:08:31ID: 18149085

write it to a ByteArrayOutputStream

ByteArrayOutputStream out = new ByteArrayOutputStream();
    while((got = in.read(res)) != -1)
    {
       out.write(res, 0, got);
    }
byte[] recieved = out.toByteArray();

 

by: CSecurityPosted on 2006-12-15 at 13:12:15ID: 18149116

And what should be defination of in? It says cannot find symbol... I defined in as a DataInputStream...

 

by: objectsPosted on 2006-12-15 at 13:15:53ID: 18149154

A BufferedInputStream should do the job

 

by: CSecurityPosted on 2006-12-15 at 13:18:26ID: 18149166

Altohught I prefer your above solution to read data in an array... But please tell me how to read in BufferedInputStream and how to access data from that?

And also if you can please tell me how to use your above code... Just tell me what should be defination of in?

Thanks alot

 

by: CSecurityPosted on 2006-12-15 at 13:19:26ID: 18149177

And what is the defination of res in your above code?

 

by: objectsPosted on 2006-12-15 at 13:30:32ID: 18149249

in is your input stream
res is a byte[]

 

by: CSecurityPosted on 2006-12-15 at 13:39:27ID: 18149306

Thanks alot object... I tested your code...

I wrote:
int i =0;
ByteArrayOutputStream outx = new ByteArrayOutputStream();
byte[] res = new byte[1024];
while ((i = in.read(res)) != -1) {
outx.write(res, 0, i)
}
System.out.println("HERE");
byte[] received = outx.toByteArray();

But it never prints out HERE!

Why?

 

by: objectsPosted on 2006-12-15 at 13:44:56ID: 18149340

sounds like u don't get an eof.
make sure sender closes the stream once they have sent all the data

 

by: CSecurityPosted on 2006-12-15 at 13:47:12ID: 18149347

How to close stream??? It is VB6 app.

 

by: CEHJPosted on 2006-12-15 at 13:48:47ID: 18149358

>>
But it never prints out HERE!

Why?
>>

Probably because it's not closed by the other side

 

by: objectsPosted on 2006-12-15 at 13:52:27ID: 18149378

probably something like  out.Close

 

by: CSecurityPosted on 2006-12-15 at 16:45:04ID: 18150079

Anyone could provide an example of receiving data from socket in BufferedStreamReader?

Thanks alot

 

by: CSecurityPosted on 2006-12-15 at 16:45:23ID: 18150082

Sorry BufferedInputStream

 

by: CEHJPosted on 2006-12-15 at 22:42:15ID: 18150830

>>Anyone could provide an example of receiving data from socket in [BufferedInputStream]?

int buf = -1;
while ((buf = bin.read()) > -1) {
    // process 'buf'
}

 

by: sciuriwarePosted on 2006-12-15 at 22:58:02ID: 18150848

As usual, after a night I wake up and the question completely has gone out of hand.
CSecurity, you should have asked a new question, because the original question has been answered.

;JOOP!

 

by: objectsPosted on 2006-12-16 at 00:17:59ID: 18150973

the code I posted earlier will would not need to be changed, just change the type of input stream as I mentioned

InputStream in = new BufferedInputStream(client.getInputStream(), 65535);
int i =0;
ByteArrayOutputStream outx = new ByteArrayOutputStream();
byte[] res = new byte[1024];
while ((i = in.read(res)) != -1) {
outx.write(res, 0, i)
}
System.out.println("HERE");
byte[] received = outx.toByteArray();

 

by: CEHJPosted on 2006-12-16 at 00:20:33ID: 18150980

We're now going backwards - 'HERE' (probably) won't be printed

 

by: objectsPosted on 2006-12-16 at 00:32:13ID: 18151008

> We're now going backwards - 'HERE' (probably) won't be printed

ROTFL, in that case the code u posted would have the same problem.
Suggest you worry about your own suggestions which btw seems to be the one going backwards, can't think why you'd be suggesting reading one byte at a time :D

 

by: CEHJPosted on 2006-12-16 at 00:45:26ID: 18151026

My suggestions need to be combined with those i made in CSecurity's other current one. When they are, it will become clear why i'm suggesting reading one byte at a time

 

by: CSecurityPosted on 2006-12-16 at 01:27:18ID: 18151078

InputStream in = new BufferedInputStream(client.getInputStream(), 65535);
int i =0;
ByteArrayOutputStream outx = new ByteArrayOutputStream();
byte[] res = new byte[1024];
while ((i = in.read(res)) != -1) {
outx.write(res, 0, i)
}
System.out.println("HERE");
byte[] received = outx.toByteArray();


This code works... but problem still exists... It's slow! So slow!


Even I changed part of outx.write to write in a file directly instead of using memory and using arrays...

But still SO SO SO Slow! Why?

Please advice... you experts use which code for retriving HUGE data in Java via sockets?

Thanks alot

 

by: CEHJPosted on 2006-12-16 at 01:31:36ID: 18151083

No expert, without access to Sun's closed source, can answer that question properly, quite apart from needing to know more details on your setup

 

by: CSecurityPosted on 2006-12-16 at 01:34:23ID: 18151088

What you want to know?

I wrote all of my code above...

I use InputStream for reading data from socket...

Then I used objects code to receive data then I used buffered stream to write in file...

What you want to know more?

But this code never worked fast... So SO SO SO slow!

Thanks alot

 

by: CSecurityPosted on 2006-12-16 at 01:58:27ID: 18151124

Is it possible that because I use NetBeans it becomes slow?

 

by: CEHJPosted on 2006-12-16 at 02:00:43ID: 18151131

Yes it is, especially if you're in debug mode

 

by: CSecurityPosted on 2006-12-16 at 02:09:17ID: 18151143

No I'm not at debug mode...

I just created a jar file and runned jar file which made in Netbeans in other PC ...But same problem...

You mean using Netbeans API and NEtbeans files makes it slow?

 

by: CSecurityPosted on 2006-12-16 at 03:47:13ID: 18151260

How about DatagramPacket?

DatagramPacket is faster?

 

by: objectsPosted on 2006-12-16 at 03:58:52ID: 18151276

> Yes it is, especially if you're in debug mode

why??

 

by: CSecurityPosted on 2006-12-16 at 04:00:14ID: 18151279

Dont' worry about debug mode... I'm not using debug mode...

Now... Do you think DatagramPacket is better?

 

by: objectsPosted on 2006-12-16 at 04:01:49ID: 18151283

java i/o is going to be slower than native i/o, how you run it has nothing to do with it.

 

by: objectsPosted on 2006-12-16 at 04:02:33ID: 18151289

datagram is no good to, as you could lose packets.

 

by: x4uPosted on 2006-12-17 at 00:44:56ID: 18154135

Maybe your performance problem is caused by the infamous Nagel's algorithm. Call setTcpNoDelay( true ) on your sockets (client and server) to disable the default behaviour of sockets to wait a while before sending anything in case there is more. But then you should write all your messages into a ByteArrayOutputStream first and write the whole message in one piece. Otherwise you would send one TCP packet with every write to the socket's output stream if Nagel's algorithm is turned off.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...