Java 类com.facebook.common.internal.Closeables 实例源码
项目:GitHub
文件:LocalFetchProducer.java
/** Creates a memory-backed encoded image from the stream. The stream is closed. */
protected EncodedImage getByteBufferBackedEncodedImage(
InputStream inputStream,
int length) throws IOException {
CloseableReference<PooledByteBuffer> ref = null;
try {
if (length <= 0) {
ref = CloseableReference.of(mPooledByteBufferFactory.newByteBuffer(inputStream));
} else {
ref = CloseableReference.of(mPooledByteBufferFactory.newByteBuffer(inputStream, length));
}
return new EncodedImage(ref);
} finally {
Closeables.closeQuietly(inputStream);
CloseableReference.closeSafely(ref);
}
}
项目:GitHub
文件:DefaultImageDecoder.java
/**
* Decodes gif into CloseableImage.
*
* @param encodedImage input image (encoded bytes plus meta data)
* @return a CloseableImage
*/
public CloseableImage decodeGif(
final EncodedImage encodedImage,
final int length,
final QualityInfo qualityInfo,
final ImageDecodeOptions options) {
InputStream is = encodedImage.getInputStream();
if (is == null) {
return null;
}
try {
if (!options.forceStaticImage
&& mAnimatedGifDecoder != null) {
return mAnimatedGifDecoder.decode(encodedImage, length, qualityInfo, options);
}
return decodeStaticImage(encodedImage, options);
} finally {
Closeables.closeQuietly(is);
}
}
项目:GitHub
文件:KeyframesDecoderExample.java
@Override
public CloseableImage decode(
EncodedImage encodedImage,
int length,
QualityInfo qualityInfo,
ImageDecodeOptions options) {
InputStream encodedInputStream = null;
try {
encodedInputStream = encodedImage.getInputStream();
return new CloseableKeyframesImage(
KFImageDeserializer.deserialize(encodedInputStream));
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
Closeables.closeQuietly(encodedInputStream);
}
}
项目:fresco
文件:StreamUtilTest.java
private void checkFileInputStream(int size) throws IOException {
byte[] bytesToWrite = new byte[size];
for (int i=0; i<size; i++) {
bytesToWrite[i] = (byte)i; // It's okay to truncate
}
File tmpFile = File.createTempFile("streamUtil", "test");
InputStream input = null;
OutputStream output = null;
try {
output = new FileOutputStream(tmpFile);
output.write(bytesToWrite);
output.close();
input = new FileInputStream(tmpFile);
byte[] bytesRead = StreamUtil.getBytesFromStream(input);
assertTrue(Arrays.equals(bytesToWrite, bytesRead));
} finally {
Closeables.close(input, true);
Closeables.close(output, false);
assertTrue(tmpFile.delete());
}
}
项目:fresco
文件:LocalFetchProducer.java
/** Creates a memory-backed encoded image from the stream. The stream is closed. */
protected EncodedImage getByteBufferBackedEncodedImage(
InputStream inputStream,
int length) throws IOException {
CloseableReference<PooledByteBuffer> ref = null;
try {
if (length <= 0) {
ref = CloseableReference.of(mPooledByteBufferFactory.newByteBuffer(inputStream));
} else {
ref = CloseableReference.of(mPooledByteBufferFactory.newByteBuffer(inputStream, length));
}
return new EncodedImage(ref);
} finally {
Closeables.closeQuietly(inputStream);
CloseableReference.closeSafely(ref);
}
}
项目:fresco
文件:KeyframesDecoderExample.java
@Override
public CloseableImage decode(
EncodedImage encodedImage,
int length,
QualityInfo qualityInfo,
ImageDecodeOptions options) {
InputStream encodedInputStream = null;
try {
encodedInputStream = encodedImage.getInputStream();
return new CloseableKeyframesImage(
KFImageDeserializer.deserialize(encodedInputStream));
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
Closeables.closeQuietly(encodedInputStream);
}
}
项目:GitHub
文件:CloseableReference.java
@Override
public void release(Closeable value) {
try {
Closeables.close(value, true);
} catch (IOException ioe) {
// This will not happen, Closeable.close swallows and logs IOExceptions
}
}
项目:GitHub
文件:SharedReferenceTest.java
@Override
public void release(Thing value) {
try {
Closeables.close(value, true);
} catch (IOException ioe) {
// this should not happen
Assert.fail();
}
}
项目:GitHub
文件:StreamUtilTest.java
/**
* Verify that using a ByteArrayInputStream does not allocate a new byte array.
*/
@Test
public void testByteArrayInputStream() throws Exception {
byte[] bytes = new byte[8];
InputStream input = new ByteArrayInputStream(bytes);
try {
byte[] bytesRead = StreamUtil.getBytesFromStream(input);
assertTrue(Arrays.equals(bytes, bytesRead));
} finally {
Closeables.close(input, true);
}
}
项目:GitHub
文件:StreamUtilTest.java
/**
* Verify that using an offset with ByteArrayInputStream still produces correct output.
*/
@Test
public void testByteArrayInputStreamWithOffset() throws Exception {
byte[] bytes = new byte[] {0, 1, 2, 3, 4};
InputStream input = new ByteArrayInputStream(bytes, 1, 4);
try {
byte[] bytesRead = StreamUtil.getBytesFromStream(input);
byte[] expectedBytes = new byte[] {1, 2, 3, 4};
assertTrue(Arrays.equals(expectedBytes, bytesRead));
} finally {
Closeables.close(input, true);
}
}
项目:GitHub
文件:ProgressiveJpegParser.java
/**
* If this is the first time calling this method, the buffer will be checked to make sure it
* starts with SOI marker (0xffd8). If the image has been identified as a non-JPEG, data will be
* ignored and false will be returned immediately on all subsequent calls.
*
* This object maintains state of the position of the last read byte. On repeated calls to this
* method, it will continue from where it left off.
*
* @param encodedImage Next set of bytes received by the caller
* @return true if a new full scan has been found
*/
public boolean parseMoreData(final EncodedImage encodedImage) {
if (mParserState == NOT_A_JPEG) {
return false;
}
final int dataBufferSize = encodedImage.getSize();
// Is there any new data to parse?
// mBytesParsed might be greater than size of dataBuffer - that happens when
// we skip more data than is available to read inside doParseMoreData method
if (dataBufferSize <= mBytesParsed) {
return false;
}
final InputStream bufferedDataStream = new PooledByteArrayBufferedInputStream(
encodedImage.getInputStream(),
mByteArrayPool.get(BUFFER_SIZE),
mByteArrayPool);
try {
StreamUtil.skip(bufferedDataStream, mBytesParsed);
return doParseMoreData(bufferedDataStream);
} catch (IOException ioe) {
// Does not happen - streams returned by PooledByteBuffers do not throw IOExceptions
Throwables.propagate(ioe);
return false;
} finally {
Closeables.closeQuietly(bufferedDataStream);
}
}
项目:fresco
文件:CloseableReference.java
@Override
public void release(Closeable value) {
try {
Closeables.close(value, true);
} catch (IOException ioe) {
// This will not happen, Closeable.close swallows and logs IOExceptions
}
}
项目:fresco
文件:SharedReferenceTest.java
@Override
public void release(Thing value) {
try {
Closeables.close(value, true);
} catch (IOException ioe) {
// this should not happen
Assert.fail();
}
}
项目:fresco
文件:StreamUtilTest.java
/**
* Verify that using a ByteArrayInputStream does not allocate a new byte array.
*/
@Test
public void testByteArrayInputStream() throws Exception {
byte[] bytes = new byte[8];
InputStream input = new ByteArrayInputStream(bytes);
try {
byte[] bytesRead = StreamUtil.getBytesFromStream(input);
assertTrue(Arrays.equals(bytes, bytesRead));
} finally {
Closeables.close(input, true);
}
}
项目:fresco
文件:StreamUtilTest.java
/**
* Verify that using an offset with ByteArrayInputStream still produces correct output.
*/
@Test
public void testByteArrayInputStreamWithOffset() throws Exception {
byte[] bytes = new byte[] {0, 1, 2, 3, 4};
InputStream input = new ByteArrayInputStream(bytes, 1, 4);
try {
byte[] bytesRead = StreamUtil.getBytesFromStream(input);
byte[] expectedBytes = new byte[] {1, 2, 3, 4};
assertTrue(Arrays.equals(expectedBytes, bytesRead));
} finally {
Closeables.close(input, true);
}
}
项目:fresco
文件:ImageFormatChecker.java
/**
* Reads image header from a file indicated by provided filename and determines
* its format. This method does not throw IOException if one occurs. In this case,
* {@link ImageFormat#UNKNOWN} will be returned.
* @param filename
* @return ImageFormat for image stored in filename
*/
public static ImageFormat getImageFormat(String filename) {
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(filename);
return getImageFormat(fileInputStream);
} catch (IOException ioe) {
return ImageFormat.UNKNOWN;
} finally {
Closeables.closeQuietly(fileInputStream);
}
}
项目:fresco
文件:ProgressiveJpegParser.java
/**
* If this is the first time calling this method, the buffer will be checked to make sure it
* starts with SOI marker (0xffd8). If the image has been identified as a non-JPEG, data will be
* ignored and false will be returned immediately on all subsequent calls.
*
* This object maintains state of the position of the last read byte. On repeated calls to this
* method, it will continue from where it left off.
*
* @param encodedImage Next set of bytes received by the caller
* @return true if a new full scan has been found
*/
public boolean parseMoreData(final EncodedImage encodedImage) {
if (mParserState == NOT_A_JPEG) {
return false;
}
final int dataBufferSize = encodedImage.getSize();
// Is there any new data to parse?
// mBytesParsed might be greater than size of dataBuffer - that happens when
// we skip more data than is available to read inside doParseMoreData method
if (dataBufferSize <= mBytesParsed) {
return false;
}
final InputStream bufferedDataStream = new PooledByteArrayBufferedInputStream(
encodedImage.getInputStream(),
mByteArrayPool.get(BUFFER_SIZE),
mByteArrayPool);
try {
StreamUtil.skip(bufferedDataStream, mBytesParsed);
return doParseMoreData(bufferedDataStream);
} catch (IOException ioe) {
// Does not happen - streams returned by PooledByteBuffers do not throw IOExceptions
Throwables.propagate(ioe);
return false;
} finally {
Closeables.closeQuietly(bufferedDataStream);
}
}
项目:HDImageView
文件:FrescoInterceptor.java
@Override
public BitmapRegionDecoder intercept(Chain chain) throws IOException {
final Uri uri = chain.uri();
BitmapRegionDecoder decoder = chain.chain(uri);
if (decoder != null){
return decoder;
}
if (UriUtil.isNetworkUri(uri)){
ImagePipeline imagePipeline = ImagePipelineFactory.getInstance().getImagePipeline();
ImageRequest request = ImageRequest.fromUri(uri);
DataSource<CloseableReference<PooledByteBuffer>> dataSource = imagePipeline.fetchEncodedImage(request,null);
try {
CloseableReference<PooledByteBuffer> ref = DataSources.waitForFinalResult(dataSource);
if (ref == null){
return null;
}
PooledByteBuffer result = ref.get();
if (BuildConfig.DEBUG) {
Log.d("FrescoInterceptor", "从我这加载");
}
try {
InputStream inputStream = new PooledByteBufferInputStream(result);
Closeables.closeQuietly(inputStream);
return BitmapRegionDecoder.newInstance(inputStream,false);
} catch (IOException e) {
ImageRequest imageRequest=ImageRequest.fromUri(uri);
CacheKey cacheKey= DefaultCacheKeyFactory.getInstance().getEncodedCacheKey(imageRequest,null);
BinaryResource resource = ImagePipelineFactory.getInstance().getMainFileCache().getResource(cacheKey);
File file=((FileBinaryResource)resource).getFile();
if (BuildConfig.DEBUG) {
Log.d("FrescoInterceptor", file.getName());
}
return Interceptors.fixJPEGDecoder(file,e);
}
} catch (Throwable throwable) {
if (BuildConfig.DEBUG) {
Log.d("FrescoInterceptor", "intercept: 加载失败了");
}
throwable.printStackTrace();
return null;
}
}
return null;
}
项目:fresco
文件:ResizeAndRotateProducer.java
private void doTransform(EncodedImage encodedImage, @Status int status) {
mProducerContext.getListener().onProducerStart(mProducerContext.getId(), PRODUCER_NAME);
ImageRequest imageRequest = mProducerContext.getImageRequest();
PooledByteBufferOutputStream outputStream = mPooledByteBufferFactory.newOutputStream();
Map<String, String> extraMap = null;
EncodedImage ret = null;
InputStream is = null;
try {
final int softwareNumerator = getSoftwareNumerator(
imageRequest,
encodedImage,
mResizingEnabled);
final int downsampleRatio = DownsampleUtil.determineSampleSize(imageRequest, encodedImage);
final int downsampleNumerator = calculateDownsampleNumerator(downsampleRatio);
final int numerator;
if (mUseDownsamplingRatio) {
numerator = downsampleNumerator;
} else {
numerator = softwareNumerator;
}
is = encodedImage.getInputStream();
if (INVERTED_EXIF_ORIENTATIONS.contains(encodedImage.getExifOrientation())) {
// Use exif orientation to rotate since we can't use the rotation angle for
// inverted exif orientations
final int exifOrientation =
getForceRotatedInvertedExifOrientation(
imageRequest.getRotationOptions(), encodedImage);
extraMap =
getExtraMap(
encodedImage, imageRequest, numerator, downsampleNumerator, softwareNumerator, 0);
JpegTranscoder.transcodeJpegWithExifOrientation(
is, outputStream, exifOrientation, numerator, DEFAULT_JPEG_QUALITY);
} else {
// Use actual rotation angle in degrees to rotate
final int rotationAngle =
getRotationAngle(imageRequest.getRotationOptions(), encodedImage);
extraMap =
getExtraMap(
encodedImage,
imageRequest,
numerator,
downsampleNumerator,
softwareNumerator,
rotationAngle);
JpegTranscoder.transcodeJpeg(
is, outputStream, rotationAngle, numerator, DEFAULT_JPEG_QUALITY);
}
CloseableReference<PooledByteBuffer> ref =
CloseableReference.of(outputStream.toByteBuffer());
try {
ret = new EncodedImage(ref);
ret.setImageFormat(DefaultImageFormats.JPEG);
try {
ret.parseMetaData();
mProducerContext.getListener().
onProducerFinishWithSuccess(mProducerContext.getId(), PRODUCER_NAME, extraMap);
if (downsampleRatio != DownsampleUtil.DEFAULT_SAMPLE_SIZE) {
status |= Consumer.IS_RESIZING_DONE;
}
getConsumer().onNewResult(ret, status);
} finally {
EncodedImage.closeSafely(ret);
}
} finally {
CloseableReference.closeSafely(ref);
}
} catch (Exception e) {
mProducerContext.getListener().
onProducerFinishWithFailure(mProducerContext.getId(), PRODUCER_NAME, e, extraMap);
if (isLast(status)) {
getConsumer().onFailure(e);
}
return;
} finally {
Closeables.closeQuietly(is);
outputStream.close();
}
}