• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1695
  • Last Modified:

how to send data in chunks from server and client in java

if the file i request is too large, the client need to wait very long. what does to be modify from my code in order to receive the data in chunks.
e.g. transmit 100MB into 10MB each chunk in order for me to process
int len=0;
        byte [] mybytearray  = new byte [buffer];
        InputStream is = connection.getInputStream();
        FileOutputStream fos = new FileOutputStream("default.amc");
        BufferedOutputStream bos = new BufferedOutputStream(fos);

 while((len=is.read(mybytearray)) > 0)
        {
        	bos.write(mybytearray,0,len);
        	current+=len;
        	
        }
        
         bos.flush();
         long end = System.currentTimeMillis();
         System.out.println(end-start);
         System.out.println(current);
         bos.close();

Open in new window

0
jackson_duffy
Asked:
jackson_duffy
  • 5
  • 4
1 Solution
 
objectsCommented:
To support sending data in chunks would also require modifying the client to support receive the data in chunks
Changes to the server would be to support specifying the start byte and the number of bytes to send.


>  while((len=is.read(mybytearray)) > 0)

btw, that should be:

 while((len=is.read(mybytearray)) >= 0)
0
 
jackson_duffyAuthor Commented:
my server side codes are shown below.
with my current codes. i only able to see the received file at the client folder when the file is received fully
Please advise any changes needed. thanks
byte[] bytes = new byte[65536];
                File file = new File("test.txt");
                FileInputStream bis = new FileInputStream(file);
                BufferedInputStream in = new BufferedInputStream(bis);
                OutputStream out = connection.getOutputStream();
                
                DataOutputStream dout = new DataOutputStream(out);
                dout.writeUTF(message);
                //now send the length (as a simple long)
                long numToSend = file.length();
                dout.writeLong(numToSend);
                //now send the file contents
                long numSent = 0;
                while(numSent < numToSend) {
                   long numThisTime = numToSend - numSent;
                   numThisTime = numThisTime < bytes.length ? numThisTime : bytes.length;
                   int numRead = in.read(bytes, 0, (int) numThisTime);
                   if(numRead ==-1 ) break;
                   dout.write(bytes,0,numRead);
                   numSent += numRead;
                }
                out.flush();
                out.close();
                connection.close();

Open in new window

0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
jackson_duffyAuthor Commented:
any amends to my codes is needed??
0
 
objectsCommented:
not sure what you need.
0
 
jackson_duffyAuthor Commented:
i am sorry.
what i am trying to ask is how to i send and receive file in chunks using a server and client architecture. and what do i have to take note of especially for the server side which is send data and the client side which is to receive data.
as you mentioned, for the send data portion, do the server have to send data in chunks too in order for the client to receive the data in chunks? or what should be done?
0
 
objectsCommented:
first step would be to design the protocol used by the client and server to communicate. Not much point writing any code until you decide how the two are going to communicate.
0
 
jackson_duffyAuthor Commented:
the protocol is udp
0
 
objectsCommented:
I meant the application protocol that the client and server will use when communicating.

heres an example od a simple udp client server setup.
http://systembash.com/content/a-simple-java-udp-server-and-udp-client/
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now