本文整理汇总了Java中java.nio.channels.FileChannel.size方法的典型用法代码示例。如果您正苦于以下问题:Java FileChannel.size方法的具体用法?Java FileChannel.size怎么用?Java FileChannel.size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类java.nio.channels.FileChannel
的用法示例。
在下文中一共展示了FileChannel.size方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: nioCopy
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
/**
* Copy a single file using NIO.
* @throws IOException
*/
private static void nioCopy(FileOutputStream fos, FileInputStream fis)
throws IOException {
FileChannel outChannel = fos.getChannel();
FileChannel inChannel = fis.getChannel();
long length = inChannel.size();
long offset = 0;
while(true) {
long remaining = length - offset;
long toTransfer = remaining < MAX_TRANSFER_SIZE ? remaining : MAX_TRANSFER_SIZE;
long transferredBytes = inChannel.transferTo(offset, toTransfer, outChannel);
offset += transferredBytes;
length = inChannel.size();
if(offset >= length) {
break;
}
}
}
示例2: writeDataInChunks
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
/**
* #385 Write data in chunks, needed if writing large amounts of data
*
* @param fileReadChannel
* @param fileWriteChannel
* @throws IOException
* @throws CannotWriteException
*/
private void writeDataInChunks(FileChannel fileReadChannel, FileChannel fileWriteChannel)
throws IOException, CannotWriteException {
long amountToBeWritten = fileReadChannel.size() - fileReadChannel.position();
long written = 0;
long chunksize = TagOptionSingleton.getInstance().getWriteChunkSize();
long count = amountToBeWritten / chunksize;
long mod = amountToBeWritten % chunksize;
for (int i = 0; i < count; i++) {
written += fileWriteChannel.transferFrom(fileReadChannel, fileWriteChannel.position(), chunksize);
fileWriteChannel.position(fileWriteChannel.position() + chunksize);
}
written += fileWriteChannel.transferFrom(fileReadChannel, fileWriteChannel.position(), mod);
if (written != amountToBeWritten) {
throw new CannotWriteException("Was meant to write " + amountToBeWritten + " bytes but only written " + written + " bytes");
}
}
示例3: read
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
/**
* Read editable Metadata
*
* @param file
* @return
* @throws CannotReadException
* @throws IOException
*/
public AiffTag read(File file) throws CannotReadException, IOException {
FileChannel fc = new FileOutputStream(file.getAbsolutePath(), false).getChannel();
AiffAudioHeader aiffAudioHeader = new AiffAudioHeader();
AiffTag aiffTag = new AiffTag();
final AiffFileHeader fileHeader = new AiffFileHeader();
fileHeader.readHeader(fc, aiffAudioHeader, file.toString());
while (fc.position() < fc.size()) {
if (!readChunk(fc, aiffTag, file.toString())) {
logger.severe(file + " UnableToReadProcessChunk");
break;
}
}
if (aiffTag.getID3Tag() == null) {
aiffTag.setID3Tag(AiffTag.createDefaultID3Tag());
}
return aiffTag;
}
示例4: readFile2BytesByMap
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
/**
* 读取文件到字符数组中
*
* @param file 文件
* @return 字符数组
*/
public static byte[] readFile2BytesByMap(File file) {
if (file == null) return null;
FileChannel fc = null;
try {
fc = new RandomAccessFile(file, "r").getChannel();
MappedByteBuffer byteBuffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()).load();
byte[] result = new byte[(int) fc.size()];
if (byteBuffer.remaining() > 0) {
byteBuffer.get(result, 0, byteBuffer.remaining());
}
return result;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
CloseUtils.closeIO(fc);
}
}
示例5: readFileWithFileSizeBuffer
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
public static StrBuilder readFileWithFileSizeBuffer(Path file ) throws IOException
{
FileChannel inChannel = null;
RandomAccessFile aFile = null;
StrBuilder builder = new StrBuilder();
try
{
aFile = new RandomAccessFile( file.toString(), "r" );
inChannel = aFile.getChannel();
long fileSize = inChannel.size();
ByteBuffer buffer = ByteBuffer.allocate( ( int ) fileSize );
inChannel.read( buffer );
buffer.flip();
for ( int i = 0; i < fileSize; i++ )
{
builder.append( ( char ) buffer.get() );
}
return builder.trim();
}
finally
{
if( null != inChannel ) inChannel.close();
if( null != aFile ) aFile.close();
}
}
示例6: readFile2BytesByMap
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
/**
* 读取文件到字节数组中
*
* @param file 文件
* @return 字符数组
*/
public static byte[] readFile2BytesByMap(File file) {
if (!FileUtils.isFileExists(file)) return null;
FileChannel fc = null;
try {
fc = new RandomAccessFile(file, "r").getChannel();
int size = (int) fc.size();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_ONLY, 0, size).load();
byte[] result = new byte[size];
mbb.get(result, 0, size);
return result;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
CloseUtils.closeIO(fc);
}
}
示例7: copyFile
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
public static void copyFile(File sourceFile, File destFile) throws IOException {
if (!destFile.exists()) {
destFile.createNewFile();
}
FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
//previous code: destination.transferFrom(source, 0, source.size());
//should be to avoid infinite loops.
long count = 0;
long size = source.size();
while ((count += destination.transferFrom(source, 0, size - count)) < size);
} finally {
if (source != null) {
source.close();
}
if (destination != null) {
destination.close();
}
}
}
示例8: create
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
static ReadBuffer create(RandomAccessFile file) throws IOException {
FileChannel ch = file.getChannel();
long size = ch.size();
// if file size is more than 2 GB and when file mapping is
// configured (default), use mapped file reader
if (canUseFileMap() && (size <= Integer.MAX_VALUE)) {
MappedByteBuffer buf;
try {
buf = ch.map(FileChannel.MapMode.READ_ONLY, 0, size);
ch.close();
return new MappedReadBuffer(buf);
} catch (IOException exp) {
exp.printStackTrace();
System.err.println("File mapping failed, will use direct read");
// fall through
}
} // else fall through
return new FileReadBuffer(file);
}
示例9: read
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
@Override
public int read(String name, ByteBuffer dst) throws IOException {
if (System.getSecurityManager() != null)
checkAccess(file.getPathForPermissionCheck(), true, false);
// wrap with channel
FileChannel fc = null;
try {
Set<OpenOption> opts = new HashSet<>();
opts.add(READ);
if (!followLinks)
opts.add(WindowsChannelFactory.OPEN_REPARSE_POINT);
fc = WindowsChannelFactory
.newFileChannel(join(file, name), null, opts, 0L);
} catch (WindowsException x) {
x.rethrowAsIOException(join(file.getPathForPermissionCheck(), name));
}
// read to EOF (nothing we can do if I/O error occurs)
try {
if (fc.size() > dst.remaining())
throw new IOException("Stream too large");
int total = 0;
while (dst.hasRemaining()) {
int n = fc.read(dst);
if (n < 0)
break;
total += n;
}
return total;
} finally {
fc.close();
}
}
示例10: xferTest03
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
@Test
public void xferTest03() throws Exception { // for bug 4559072
byte[] srcData = new byte[] {1,2,3,4} ;
// get filechannel for the source file.
File source = File.createTempFile("source", null);
source.deleteOnExit();
RandomAccessFile raf1 = new RandomAccessFile(source, "rw");
FileChannel fc1 = raf1.getChannel();
fc1.truncate(0);
// write out data to the file channel
int bytesWritten = 0;
while (bytesWritten < 4) {
bytesWritten = fc1.write(ByteBuffer.wrap(srcData));
}
// get filechannel for the dst file.
File dest = File.createTempFile("dest", null);
dest.deleteOnExit();
RandomAccessFile raf2 = new RandomAccessFile(dest, "rw");
FileChannel fc2 = raf2.getChannel();
fc2.truncate(0);
fc1.transferTo(0, srcData.length + 1, fc2);
if (fc2.size() > 4)
throw new Exception("xferTest03 failed");
fc1.close();
fc2.close();
raf1.close();
raf2.close();
source.delete();
dest.delete();
}
示例11: parseBreakNumByCheck
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
private int parseBreakNumByCheck(Task task) {
String taskId = task.getTaskId();
Integer pieceSize = task.getPieceSize();
long position = 0;
ByteBuffer bb = generateByteBuffer();
try (FileInputStream fis = new FileInputStream(PathUtil.getDownloadPathStr(taskId))) {
FileChannel fc = fis.getChannel();
long curFileLen = (fc.size() / pieceSize - 1) * pieceSize;
curFileLen = curFileLen > 0 ? curFileLen : 0;
int pieceLen;
while (position < curFileLen) {
bb.clear();
bb.limit(4);
fc.read(bb, position);
bb.flip();
pieceLen = bb.getInt() & 0xffffff;
if (pieceLen > 0) {
bb.clear();
bb.limit(1);
fc.read(bb, pieceLen + position + 4);
bb.flip();
if (bb.get() == (byte)0x7f) {
position += pieceSize;
continue;
}
}
break;
}
} catch (Exception e) {
logger.error("parse break num by check error for taskId:{}", taskId, e);
}
return (int)(position / pieceSize);
}
示例12: HprofMappedByteBuffer
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
HprofMappedByteBuffer(File dumpFile) throws IOException {
FileInputStream fis = new FileInputStream(dumpFile);
FileChannel channel = fis.getChannel();
length = channel.size();
dumpBuffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, length);
channel.close();
readHeader();
}
示例13: doCopyFile
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
/**
* Internal copy file method.
*
* @param srcFile the validated source file, must not be {@code null}
* @param destFile the validated destination file, must not be {@code null}
* @param preserveFileDate whether to preserve the file date
* @throws java.io.IOException if an error occurs
*/
private static void doCopyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException {
if (destFile.exists() && destFile.isDirectory()) {
throw new IOException("Destination '" + destFile + "' exists but is a directory");
}
FileInputStream fis = null;
FileOutputStream fos = null;
FileChannel input = null;
FileChannel output = null;
try {
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(destFile);
input = fis.getChannel();
output = fos.getChannel();
long size = input.size();
long pos = 0;
long count = 0;
while (pos < size) {
count = size - pos > FILE_COPY_BUFFER_SIZE ? FILE_COPY_BUFFER_SIZE : size - pos;
pos += output.transferFrom(input, pos, count);
}
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(fos);
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(fis);
}
if (srcFile.length() != destFile.length()) {
throw new IOException("Failed to copy full contents from '" +
srcFile + "' to '" + destFile + "'");
}
if (preserveFileDate) {
destFile.setLastModified(srcFile.lastModified());
}
}
示例14: transferToFully
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
/**
* Transfers data from FileChannel using
* {@link FileChannel#transferTo(long, long, WritableByteChannel)}.
*
* Similar to readFully(), this waits till requested amount of
* data is transfered.
*
* @param fileCh FileChannel to transfer data from.
* @param position position within the channel where the transfer begins
* @param count number of bytes to transfer.
*
* @throws EOFException
* If end of input file is reached before requested number of
* bytes are transfered.
*
* @throws SocketTimeoutException
* If this channel blocks transfer longer than timeout for
* this stream.
*
* @throws IOException Includes any exception thrown by
* {@link FileChannel#transferTo(long, long, WritableByteChannel)}.
*/
public void transferToFully(FileChannel fileCh, long position, int count)
throws IOException {
while (count > 0) {
/*
* Ideally we should wait after transferTo returns 0. But because of
* a bug in JRE on Linux (http://bugs.sun.com/view_bug.do?bug_id=5103988),
* which throws an exception instead of returning 0, we wait for the
* channel to be writable before writing to it. If you ever see
* IOException with message "Resource temporarily unavailable"
* thrown here, please let us know.
*
* Once we move to JAVA SE 7, wait should be moved to correct place.
*/
waitForWritable();
int nTransfered = (int) fileCh.transferTo(position, count, getChannel());
if (nTransfered == 0) {
//check if end of file is reached.
if (position >= fileCh.size()) {
throw new EOFException("EOF Reached. file size is " + fileCh.size() +
" and " + count + " more bytes left to be " +
"transfered.");
}
//otherwise assume the socket is full.
//waitForWritable(); // see comment above.
} else if (nTransfered < 0) {
throw new IOException("Unexpected return of " + nTransfered +
" from transferTo()");
} else {
position += nTransfered;
count -= nTransfered;
}
}
}
示例15: loadBaseAndCheckByFileChannel
import java.nio.channels.FileChannel; //导入方法依赖的package包/类
private boolean loadBaseAndCheckByFileChannel(String path)
{
try
{
FileInputStream fis = new FileInputStream(path);
// 1.从FileInputStream对象获取文件通道FileChannel
FileChannel channel = fis.getChannel();
int fileSize = (int) channel.size();
// 2.从通道读取文件内容
ByteBuffer byteBuffer = ByteBuffer.allocate(fileSize);
// channel.read(ByteBuffer) 方法就类似于 inputstream.read(byte)
// 每次read都将读取 allocate 个字节到ByteBuffer
channel.read(byteBuffer);
// 注意先调用flip方法反转Buffer,再从Buffer读取数据
byteBuffer.flip();
// 有几种方式可以操作ByteBuffer
// 可以将当前Buffer包含的字节数组全部读取出来
byte[] bytes = byteBuffer.array();
byteBuffer.clear();
// 关闭通道和文件流
channel.close();
fis.close();
int index = 0;
size = ByteUtil.bytesHighFirstToInt(bytes, index);
index += 4;
base = new int[size + 65535]; // 多留一些,防止越界
check = new int[size + 65535];
for (int i = 0; i < size; i++)
{
base[i] = ByteUtil.bytesHighFirstToInt(bytes, index);
index += 4;
check[i] = ByteUtil.bytesHighFirstToInt(bytes, index);
index += 4;
}
}
catch (Exception e)
{
return false;
}
return true;
}