package com.nostra13.universalimageloader.sample.ext; import com.nostra13.universalimageloader.core.decode.BaseImageDecoder; import com.nostra13.universalimageloader.core.decode.ImageDecodingInfo; import java.io.IOException; import java.io.InputStream; /** * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) */ public class BrokenJpegImageDecoder extends BaseImageDecoder { public BrokenJpegImageDecoder(boolean loggingEnabled) { super(loggingEnabled); } @Override protected InputStream getImageStream(ImageDecodingInfo decodingInfo) throws IOException { InputStream stream = decodingInfo.getDownloader() .getStream(decodingInfo.getImageUri(), decodingInfo.getExtraForDownloader()); return stream == null ? null : new JpegClosedInputStream(stream); } private class JpegClosedInputStream extends InputStream { private static final int JPEG_EOI_1 = 0xFF; private static final int JPEG_EOI_2 = 0xD9; private final InputStream inputStream; private int bytesPastEnd; private JpegClosedInputStream(InputStream inputStream) { this.inputStream = inputStream; bytesPastEnd = 0; } @Override public int read() throws IOException { int buffer = inputStream.read(); if (buffer == -1) { if (bytesPastEnd > 0) { buffer = JPEG_EOI_2; } else { ++bytesPastEnd; buffer = JPEG_EOI_1; } } return buffer; } } }