/*
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.binaryresource;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import com.facebook.common.internal.Files;
import com.facebook.common.internal.Preconditions;
/*
* Implementation of BinaryResource based on a real file. @see BinaryResource for more details.
*/
public class FileBinaryResource implements BinaryResource {
private final File mFile;
private FileBinaryResource(File file) {
mFile = Preconditions.checkNotNull(file);
}
public File getFile() {
return mFile;
}
@Override
public InputStream openStream() throws IOException {
return new FileInputStream(mFile);
}
@Override
public long size() {
return mFile.length(); // 0L if file doesn't exist
}
@Override
public byte[] read() throws IOException {
return Files.toByteArray(mFile);
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof FileBinaryResource)) {
return false;
}
FileBinaryResource that = (FileBinaryResource)obj;
return mFile.equals(that.mFile);
}
@Override
public int hashCode() {
return mFile.hashCode();
}
/*
* Factory method to create a wrapping BinaryResource without explicitly taking care of null.
* If the supplied file is null, instead of BinaryResource, null is returned.
*/
public static FileBinaryResource createOrNull(File file) {
return (file != null) ? new FileBinaryResource(file) : null;
}
}