Pramod,
Base64 encoding has end-of-data markers.
http://en.wikipedia.org/wiki/Base64
Your code encodes each 1024-byte chunk of input image data into its own
Base64 string. Each of those has its own end markers.
Because of this, the receiving side doesn't see one piece of data
encoded with Base64, rather, it sees multiple pieces of data, which I
guess is not what it expects.
There are several ways to fix this:
1 - Write your own code to encode partial data pieces, flushing the
output at the very end. Base64 encoding is not difficult.
2 - Use a ready-made class, like this one:
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64OutputStream.html
It's equivalent is available in Android starting with 2.2:
http://developer.android.com/reference/android/util/Base64OutputStream.html
3 - Change buffer size in your code to 1023 (a multiple of 3). This is a
hack, but probably the easiest thing to do.
-- Kostya
30.08.2010 11:23, pramod.deore пишет:
Someone knows how to encode large image in Base64 format. Because I
had tried using creating byte array as large as image size but if
image it encode image if size of image is upto 800kb, if image is
greater than 800kb then it throws runtime exception as
OutofMemoryException. So I had decided use 1kb of byte array, in that
I encode 1kb of image write to a file after that again encode 1kb of
image and write to a file ..... The code is like this
public void encodeImage()
{
try
{
out = new PrintWriter("c:/program1/zzz.txt");
InputStream inputStream = new FileInputStream
("c:/program1/
tt.jpg");
OutputStream outputStream = new
FileOutputStream("c:/program1/
zzz.txt");
byte[] b = new byte[1024];
while((read= inputStream.read(b))>0)
{
System.out.println ("Inside while");
inputStream.mark(b.length);
String encoded = Base64.encode(b);
//System.out.println (encoded);
out.print(encoded);
out.flush();
//bas.write(b);
}
out.close();
}
catch (Exception e)
{
System.out.println (e);
}
}
But when I decode that image here
http://www.opinionatedgeek.com/dotnet/tools/base64decode/
then it says that he input is not a valid Base-64 string.
Please help me to solve this issue.
--
Kostya Vasilyev -- WiFi Manager + pretty widget -- http://kmansoft.wordpress.com
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en