Upload using java nio

W

William Lopes

Hi, I'm building a network test with source code (basically) here: http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/

My server contains a php script that contains just a field with name = $_FILES['uploaded_file']['name']

But, this java script file isn't very good, it is using the io lib, and I want change to the nio lib, because of the perfomance.

My doubt is, how do I can set the field 'uploaded_file' or create a channel that connects with it?

Thanks!
 
A

Arne Vajhøj

Hi, I'm building a network test with source code (basically) here: http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/

My server contains a php script that contains just a field with name = $_FILES['uploaded_file']['name']

But, this java script file isn't very good, it is using the io lib, and I want change to the nio lib, because of the perfomance.

My doubt is, how do I can set the field 'uploaded_file' or create a channel that connects with it?

Why do you expect a file upload to be faster client side with NIO?

Arne
 
W

William Lopes

Em terça-feira, 13 de maio de 2014 21h37min07s UTC-3, Arne Vajhøj escreveu:
Hi, I'm building a network test with source code (basically) here: http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/
My server contains a php script that contains just a field with name = $_FILES['uploaded_file']['name']
But, this java script file isn't very good, it is using the io lib, andI want change to the nio lib, because of the perfomance.
My doubt is, how do I can set the field 'uploaded_file' or create a channel that connects with it?



Why do you expect a file upload to be faster client side with NIO?



Arne

Because I read about this and I found that nio is it a better way, more efficient, like the native languages. I made tests in LTE network and the values are too lower than expected (using io lib). I did a download test on nioand was much better comparing with io lib, so I suppose that is a better ideia make on upload too.
 
W

William Lopes

Em terça-feira, 13 de maio de 2014 21h37min07s UTC-3, Arne Vajhøj escreveu:
Hi, I'm building a network test with source code (basically) here: http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/
My server contains a php script that contains just a field with name = $_FILES['uploaded_file']['name']
But, this java script file isn't very good, it is using the io lib, andI want change to the nio lib, because of the perfomance.
My doubt is, how do I can set the field 'uploaded_file' or create a channel that connects with it?



Why do you expect a file upload to be faster client side with NIO?



Arne

Because I read about this and I found that nio is it a better way, more efficient, like the native languages. I made tests in LTE network and the values are too lower than expected (using io lib). I did a download test on nioand was much better comparing with io lib, so I suppose that is a better ideia make on upload too.
 
A

Arne Vajhøj

Em terça-feira, 13 de maio de 2014 21h37min07s UTC-3, Arne Vajhøj escreveu:
Hi, I'm building a network test with source code (basically) here: http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/

My server contains a php script that contains just a field with name = $_FILES['uploaded_file']['name']

But, this java script file isn't very good, it is using the io lib, and I want change to the nio lib, because of the perfomance.

My doubt is, how do I can set the field 'uploaded_file' or create a channel that connects with it?

Why do you expect a file upload to be faster client side with NIO?

Because I read about this

Where?

NIO supports non-blocking IO and that could potentially have benefits
server applications with thousands of threads.

But for a client app with just a few threads??
and I found that nio is it a better way, more efficient, like the native languages.

You found exactly what?
I made tests in LTE network and the values are too lower than expected (using io lib). I did a download test on nio and was much better comparing with io lib, so I suppose that is a better ideia make on upload too.

It is very easy to get micro benchmarks wrong.

And when there are no logical explanation for why a result is at it is,
then the most likely explanation is that the benchmark is flawed.

Arne
 
A

Arne Vajhøj

Em terça-feira, 13 de maio de 2014 21h37min07s UTC-3, Arne Vajhøj
escreveu:
On 5/13/2014 2:37 PM, William Lopes wrote:
Hi, I'm building a network test with source code (basically) here:
http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/


My server contains a php script that contains just a field with name
= $_FILES['uploaded_file']['name']

But, this java script file isn't very good, it is using the io lib,
and I want change to the nio lib, because of the perfomance.

My doubt is, how do I can set the field 'uploaded_file' or create a
channel that connects with it?

Why do you expect a file upload to be faster client side with NIO?

Because I read about this

Where?

NIO supports non-blocking IO and that could potentially have benefits
server applications with thousands of threads.

But for a client app with just a few threads??
and I found that nio is it a better way, more efficient, like the
native languages.

You found exactly what?
I made tests in LTE network and the values are too lower than expected
(using io lib). I did a download test on nio and was much better
comparing with io lib, so I suppose that is a better ideia make on
upload too.

It is very easy to get micro benchmarks wrong.

And when there are no logical explanation for why a result is at it is,
then the most likely explanation is that the benchmark is flawed.

Relevant links:

http://www.theserverside.com/discussions/thread.tss?thread_id=26700
http://mailinator.blogspot.com/2008/02/kill-myth-please-nio-is-not-faster-than.html
http://www.theserverside.com/news/thread.tss?thread_id=48449
http://www.thebuzzmedia.com/java-io-faster-than-nio-old-is-new-again/
http://stackoverflow.com/questions/...mprovement-compared-to-traditional-io-in-java

Only contradiction is:

http://www.idryman.org/blog/2013/09/28/java-fast-io-using-java-nio-api/

(but I strongly suspect that this result is because he buffer in his
NIO code but not in his IO code)

Arne
 
W

William Lopes

Em terça-feira, 13 de maio de 2014 23h08min50s UTC-3, Arne Vajhøj escreveu:
On 5/13/2014 9:38 PM, William Lopes wrote:
Em ter�a-feira, 13 de maio de 2014 21h37min07s UTC-3, Arne Vajh�j
escreveu:
On 5/13/2014 2:37 PM, William Lopes wrote:
Hi, I'm building a network test with source code (basically) here:
http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/


My server contains a php script that contains just a field with name
= $_FILES['uploaded_file']['name']

But, this java script file isn't very good, it is using the io lib,
and I want change to the nio lib, because of the perfomance.

My doubt is, how do I can set the field 'uploaded_file' or create a
channel that connects with it?

Why do you expect a file upload to be faster client side with NIO?

Because I read about this

NIO supports non-blocking IO and that could potentially have benefits
server applications with thousands of threads.

But for a client app with just a few threads??


You found exactly what?


It is very easy to get micro benchmarks wrong.

And when there are no logical explanation for why a result is at it is,
then the most likely explanation is that the benchmark is flawed.



Relevant links:



http://www.theserverside.com/discussions/thread.tss?thread_id=26700

http://mailinator.blogspot.com/2008/02/kill-myth-please-nio-is-not-faster-than.html

http://www.theserverside.com/news/thread.tss?thread_id=48449

http://www.thebuzzmedia.com/java-io-faster-than-nio-old-is-new-again/

http://stackoverflow.com/questions/...mprovement-compared-to-traditional-io-in-java



Only contradiction is:



http://www.idryman.org/blog/2013/09/28/java-fast-io-using-java-nio-api/



(but I strongly suspect that this result is because he buffer in his

NIO code but not in his IO code)



Arne

Thank you for explanations!

OK, even that I'm wrong, I would like to test using nio lib, just for test.The difference on download test reaches to be large. Maybe for my necessity the nio lib could be better, or not, but I would really like test it.

Do you could help me?
 
M

markspace

OK, even that I'm wrong, I would like to test using nio lib, just for
test. The difference on download test reaches to be large. Maybe for
my necessity the nio lib could be better, or not, but I would really
like test it.

Do you could help me?


This is what I could find that seems relevant. There's client
information at the bottom of the page:

http://rox-xmlrpc.sourceforge.net/niotut/

The obvious search, which might help you find other relevant pages:

https://www.google.com/search?q=java+nio+network+tutorial
 
J

Josip Almasi

Hi, I'm building a network test with source code (basically) here: http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/

My server contains a php script that contains just a field with name = $_FILES['uploaded_file']['name']

But, this java script file isn't very good, it is using the io lib, and I want change to the nio lib, because of the perfomance.

I gave up nio because it introduces a number of platform specific
troubles. 'Troubles' being both OS and JVM impl dependent.
You may get OOM with bogus description.
IBM JVM gives more precise OOM explanation, like was it ENOMEM or
ENOBUFS, which gives you more info on how to tune OS.

Furthermore, there's just a few nio methods that actually utilize proper
OS functions in order to avoid unnecessary transfer between kernel mem
and userspace mem.
IIRC, with sun jvm on linux, I've found exactly one nio method that
actually does the job. And apache mina did not use it:> So neither did
software using it, many many server software.
(netty does though)

I have no idea how android nio works.

But as the man said, nio is not faster than io - it all depends on other
threads and their synchronization.
In your case, setProgress() is blocking and synchronized.
Blocking = transfer waits for bar to render.
Synchronized = slow.

Recommendiation:
Make a thread to update progress bar(s). Let it have non-blocking calls
to update volatile/atomic internal counter(s). Use these calls instead
of setProgress(). Make it sleep for 100-1000 ms, then render bar(s).

Regards...
 
W

William Lopes

W

William Lopes

Em quarta-feira, 14 de maio de 2014 08h46min14s UTC-3, Josip Almasi escreveu:
Hi, I'm building a network test with source code (basically) here: http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/
My server contains a php script that contains just a field with name = $_FILES['uploaded_file']['name']
But, this java script file isn't very good, it is using the io lib, and I want change to the nio lib, because of the perfomance.



I gave up nio because it introduces a number of platform specific

troubles. 'Troubles' being both OS and JVM impl dependent.

You may get OOM with bogus description.

IBM JVM gives more precise OOM explanation, like was it ENOMEM or

ENOBUFS, which gives you more info on how to tune OS.



Furthermore, there's just a few nio methods that actually utilize proper

OS functions in order to avoid unnecessary transfer between kernel mem

and userspace mem.

IIRC, with sun jvm on linux, I've found exactly one nio method that

actually does the job. And apache mina did not use it:> So neither did

software using it, many many server software.

(netty does though)



I have no idea how android nio works.



But as the man said, nio is not faster than io - it all depends on other

threads and their synchronization.

In your case, setProgress() is blocking and synchronized.

Blocking = transfer waits for bar to render.

Synchronized = slow.



Recommendiation:

Make a thread to update progress bar(s). Let it have non-blocking calls

to update volatile/atomic internal counter(s). Use these calls instead

of setProgress(). Make it sleep for 100-1000 ms, then render bar(s).



Regards...

My network test is for android plataform, on my test already I modified like you said. Is a few better now, but I still wait found the answer of how use nio lib.

Thank you!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,440
Members
44,830
Latest member
ZADIva7383

Latest Threads

Top