title: Android/Java: Saving a byte array to a file (.jpeg)
body: <p>I am developing an application for Android, and part of the application has to takes pictures and save them to the SDcard. The onPictureTaken method returned a byte array with the data of the captured image. </p>
  
  <p>All I need to do is save the byte array into a .jpeg image file. I have attempted to do this with the help of BitmapFactory.decodeByteArray (to get a Bitmap) and then bImage.compress (to an OutputStream), a plain OutputStream, and a BufferedOutputStream. All three of these methods seem to give me the same weird bug. My Android phone (8MP camera and a decent processor), seems to save the photo (size looks correct), but in a corrupted way (the image is sliced and each slice is shifted; or I just get almost horizontal lines of various colors); and The weird thing is, that an Android tablet with a 5MP camera and a fast processor, seems to save the image correctly. </p>
  
  <p>So I thought maybe the processor can't keep up with saving large images, because I got OutOfMemory Exceptions after about 3 pictures (even at compression quality of 40). But then how does the built in Camera app do it, and much faster too? I'm pretty sure (from debug) that the OutputStream writes all the data (bytes) and it should be fine, but it's still corrupted.</p>
  
  <p>***In short, what is the best/fastest way (that works) to save a byte array to a jpeg file?</p>
  
  <p>Thanks in advance,
  Mark</p>
  
  <p>code I've tried (and some other slight variations):</p>
  
  <pre><code>    try {
          Bitmap image = BitmapFactory.decodeByteArray(args, 0, args.length);
          OutputStream fOut = new FileOutputStream(externalStorageFile);
          long time = System.currentTimeMillis();
          image.compress(Bitmap.CompressFormat.JPEG,
                  jpegQuality, fOut);
          System.out.println(System.currentTimeMillis() - time);
          fOut.flush();
          fOut.close();
      } catch (Exception e) {
      }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>    try {
          externalStorageFile.createNewFile();
          FileOutputStream fos = new FileOutputStream(externalStorageFile);
          fos.write(args);
          fos.flush();
          fos.close();
      } catch (Exception e) {
          e.printStackTrace();
      }
  </code></pre>