当前位置: 首页>>代码示例>>Java>>正文


Java FileRegion类代码示例

本文整理汇总了Java中io.netty.channel.FileRegion的典型用法代码示例。如果您正苦于以下问题:Java FileRegion类的具体用法?Java FileRegion怎么用?Java FileRegion使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


FileRegion类属于io.netty.channel包,在下文中一共展示了FileRegion类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: transferTo

import io.netty.channel.FileRegion; //导入依赖的package包/类
/**
 * This code is more complicated than you would think because we might require multiple
 * transferTo invocations in order to transfer a single MessageWithHeader to avoid busy waiting.
 *
 * The contract is that the caller will ensure position is properly set to the total number
 * of bytes transferred so far (i.e. value returned by transfered()).
 */
@Override
public long transferTo(final WritableByteChannel target, final long position) throws IOException {
  Preconditions.checkArgument(position == totalBytesTransferred, "Invalid position.");
  // Bytes written for header in this call.
  long writtenHeader = 0;
  if (header.readableBytes() > 0) {
    writtenHeader = copyByteBuf(header, target);
    totalBytesTransferred += writtenHeader;
    if (header.readableBytes() > 0) {
      return writtenHeader;
    }
  }

  // Bytes written for body in this call.
  long writtenBody = 0;
  if (body instanceof FileRegion) {
    writtenBody = ((FileRegion) body).transferTo(target, totalBytesTransferred - headerLength);
  } else if (body instanceof ByteBuf) {
    writtenBody = copyByteBuf((ByteBuf) body, target);
  }
  totalBytesTransferred += writtenBody;

  return writtenHeader + writtenBody;
}
 
开发者ID:spafka,项目名称:spark_deep,代码行数:32,代码来源:MessageWithHeader.java

示例2: checkProducerTransactionState

import io.netty.channel.FileRegion; //导入依赖的package包/类
public void checkProducerTransactionState(
    final Channel channel,
    final CheckTransactionStateRequestHeader requestHeader,
    final SelectMappedBufferResult selectMappedBufferResult) {
    RemotingCommand request =
        RemotingCommand.createRequestCommand(RequestCode.CHECK_TRANSACTION_STATE, requestHeader);
    request.markOnewayRPC();

    try {
        FileRegion fileRegion =
            new OneMessageTransfer(request.encodeHeader(selectMappedBufferResult.getSize()),
                selectMappedBufferResult);
        channel.writeAndFlush(fileRegion).addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                selectMappedBufferResult.release();
                if (!future.isSuccess()) {
                    log.error("invokeProducer failed,", future.cause());
                }
            }
        });
    } catch (Throwable e) {
        log.error("invokeProducer exception", e);
        selectMappedBufferResult.release();
    }
}
 
开发者ID:lyy4j,项目名称:rmq4note,代码行数:27,代码来源:Broker2Client.java

示例3: messageReceived

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
protected void messageReceived(ChannelHandlerContext cxt, String msg)
		throws Exception {
	File file = new File(msg);
	if(file.exists()) {
		if(!file.isFile()){
			cxt.writeAndFlush("No file " + file + CR);
		}
		cxt.writeAndFlush("file " + file.length() + CR);
		RandomAccessFile randomAccessFile = new RandomAccessFile(msg, "r");
		FileRegion fileRegion = new DefaultFileRegion(randomAccessFile.getChannel(), 0, randomAccessFile.length());
		cxt.write(fileRegion);
		cxt.writeAndFlush(CR);
		randomAccessFile.close();
	}else{
		cxt.writeAndFlush("File not found: " + file + CR);
	}
}
 
开发者ID:hdcuican,项目名称:java_learn,代码行数:19,代码来源:FileServerHandler.java

示例4: write

import io.netty.channel.FileRegion; //导入依赖的package包/类
/**
 * {@inheritDoc}
 * @see io.netty.channel.ChannelOutboundInvoker#write(java.lang.Object)
 */
@Override
public ChannelFuture write(Object message) {
	if(message!=null) {
		if(message instanceof FileRegion) {
			try {
				Pipe pipe = Pipe.open();
				FileRegion fr = (FileRegion)message;
				
				long bytesToRead = fr.count();
				fr.transferTo(pipe.sink(), 0L);
				byte[] content = new byte[(int)bytesToRead];
				pipe.source().read(ByteBuffer.wrap(content));
				channelWrites.add(content);
			} catch (Exception ex) {
				log.error("Failed to read content from pipe", ex);
				channelWrites.add(ex);
			}
		} else {
			channelWrites.add(message);
		}
		log.info("Received Channel Write [{}]  type:[{}]", message, message.getClass().getName());
	}
	
	return null;
}
 
开发者ID:nickman,项目名称:HeliosStreams,代码行数:30,代码来源:InvocationChannel.java

示例5: testEncode

import io.netty.channel.FileRegion; //导入依赖的package包/类
/**
 * This unit test case ensures that {@link FileRegionEncoder} indeed wraps {@link FileRegion} to
 * {@link ByteBuf}.
 * @throws IOException if there is an error.
 */
@Test
public void testEncode() throws IOException {
    FileRegionEncoder fileRegionEncoder = new FileRegionEncoder();
    EmbeddedChannel channel = new EmbeddedChannel(fileRegionEncoder);
    File file = File.createTempFile(UUID.randomUUID().toString(), ".data");
    file.deleteOnExit();
    Random random = new Random(System.currentTimeMillis());
    int dataLength = 1 << 10;
    byte[] data = new byte[dataLength];
    random.nextBytes(data);
    write(file, data);
    FileRegion fileRegion = new DefaultFileRegion(file, 0, dataLength);
    Assert.assertEquals(0, fileRegion.transfered());
    Assert.assertEquals(dataLength, fileRegion.count());
    Assert.assertTrue(channel.writeOutbound(fileRegion));
    ByteBuf out = (ByteBuf) channel.readOutbound();
    byte[] arr = new byte[out.readableBytes()];
    out.getBytes(0, arr);
    Assert.assertArrayEquals("Data should be identical", data, arr);
}
 
开发者ID:apache,项目名称:rocketmq,代码行数:26,代码来源:FileRegionEncoderTest.java

示例6: messageReceived

import io.netty.channel.FileRegion; //导入依赖的package包/类
public void messageReceived(ChannelHandlerContext ctx, String msg)
    throws Exception {
File file = new File(msg);
if (file.exists()) {
    if (!file.isFile()) {
	ctx.writeAndFlush("Not a file : " + file + CR);
	return;
    }
    ctx.write(file + " " + file.length() + CR);
    RandomAccessFile randomAccessFile = new RandomAccessFile(msg, "r");
    FileRegion region = new DefaultFileRegion(
	    randomAccessFile.getChannel(), 0, randomAccessFile.length());
    ctx.write(region);
    ctx.writeAndFlush(CR);
    randomAccessFile.close();
} else {
    ctx.writeAndFlush("File not found: " + file + CR);
}
   }
 
开发者ID:changyuefeng,项目名称:netty-book,代码行数:20,代码来源:FileServerHandler.java

示例7: doWriteFileRegion

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
protected void doWriteFileRegion(FileRegion region) throws Exception {
    OutputStream os = this.os;
    if (os == null) {
        throw new NotYetConnectedException();
    }
    if (outChannel == null) {
        outChannel = Channels.newChannel(os);
    }

    long written = 0;
    for (;;) {
        long localWritten = region.transferTo(outChannel, written);
        if (localWritten == -1) {
            checkEOF(region);
            return;
        }
        written += localWritten;

        if (written >= region.count()) {
            return;
        }
    }
}
 
开发者ID:wuyinxian124,项目名称:netty4.0.27Learn,代码行数:25,代码来源:OioByteStreamChannel.java

示例8: filterOutboundMessage

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
protected final Object filterOutboundMessage(Object msg) {
    if (msg instanceof ByteBuf) {
        ByteBuf buf = (ByteBuf) msg;
        if (buf.isDirect()) {
            return msg;
        }

        return newDirectBuffer(buf);
    }

    if (msg instanceof FileRegion) {
        return msg;
    }

    throw new UnsupportedOperationException(
            "unsupported message type: " + StringUtil.simpleClassName(msg) + EXPECTED_TYPES);
}
 
开发者ID:wuyinxian124,项目名称:netty4.0.27Learn,代码行数:19,代码来源:AbstractNioByteChannel.java

示例9: messageReceived

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception {

	File file = new File(msg);
	if (file.exists()) {
		if (!file.isFile()) {
			ctx.writeAndFlush("not a file :" + file + CR);
			return;
		}
		ctx.write(file + " " + file.length() + CR);

		RandomAccessFile raf = new RandomAccessFile(file, "r");
		FileRegion fileRegion = new DefaultFileRegion(raf.getChannel(), 0, raf.length());

		ctx.write(fileRegion);
		ctx.writeAndFlush(CR);
		raf.close();

	} else {
		ctx.writeAndFlush("file not found: " + file + CR);
	}
}
 
开发者ID:zoopaper,项目名称:netty-study,代码行数:23,代码来源:FileServerHandler.java

示例10: messageReceived

import io.netty.channel.FileRegion; //导入依赖的package包/类
public void messageReceived(ChannelHandlerContext ctx, String msg)
        throws Exception {
    File file = new File(msg);
    if (file.exists()) {
        if (!file.isFile()) {
            ctx.writeAndFlush("Not a file : " + file + CR);
            return;
        }
        ctx.write(file + " " + file.length() + CR);
        RandomAccessFile randomAccessFile = new RandomAccessFile(msg, "r");
        FileRegion region = new DefaultFileRegion(
                randomAccessFile.getChannel(), 0, randomAccessFile.length());
        ctx.write(region);
        ctx.writeAndFlush(CR);
        randomAccessFile.close();
    } else {
        ctx.writeAndFlush("File not found: " + file + CR);
    }
}
 
开发者ID:Hope6537,项目名称:hope-tactical-equipment,代码行数:20,代码来源:FileServerHandler.java

示例11: channelRead0

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
public void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
    File file = new File(msg);
    if (file.exists()) {
        if (!file.isFile()) {
            ctx.writeAndFlush("Not a file: " + file + '\n');
            return;
        }
        ctx.write(file + " " + file.length() + '\n');
        FileInputStream fis = new FileInputStream(file);
        FileRegion region = new DefaultFileRegion(fis.getChannel(), 0, file.length());
        ctx.write(region);
        ctx.writeAndFlush("\n");
        fis.close();
    } else {
        ctx.writeAndFlush("File not found: " + file + '\n');
    }
}
 
开发者ID:kyle-liu,项目名称:netty4study,代码行数:19,代码来源:FileServer.java

示例12: doWrite

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
protected void doWrite(ChannelOutboundBuffer in) throws Exception {
    for (;;) {
        Object msg = in.current();
        if (msg == null) {
            // nothing left to write
            break;
        }
        if (msg instanceof ByteBuf) {
            ByteBuf buf = (ByteBuf) msg;
            while (buf.isReadable()) {
                doWriteBytes(buf);
            }
            in.remove();
        } else if (msg instanceof FileRegion) {
            doWriteFileRegion((FileRegion) msg);
            in.remove();
        } else {
            in.remove(new UnsupportedOperationException(
                    "unsupported message type: " + StringUtil.simpleClassName(msg)));
        }
    }
}
 
开发者ID:kyle-liu,项目名称:netty4study,代码行数:24,代码来源:AbstractOioByteChannel.java

示例13: channelRead0

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg)
		throws Exception {
	 File file = new File(msg);
           if (file.exists()) {
               if (!file.isFile()) {
                   ctx.writeAndFlush("Not a file: " + file + '\n');
                   return;
               }
               ctx.write(file + " " + file.length() + '\n');
               FileInputStream fis = new FileInputStream(file);
               FileRegion region = new DefaultFileRegion(fis.getChannel(), 0, file.length());
               ctx.write(region);
               ctx.writeAndFlush("\n");
               fis.close();
           } else {
               ctx.writeAndFlush("File not found: " + file + '\n');
           }
	
}
 
开发者ID:desperado1992,项目名称:distributeTemplate,代码行数:21,代码来源:FileServer.java

示例14: messageReceived

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
public void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception {
    File file = new File(msg);
    if (file.exists()) {
        if (!file.isFile()) {
            ctx.writeAndFlush("Not a file: " + file + '\n');
            return;
        }
        ctx.write(file + " " + file.length() + '\n');
        FileInputStream fis = new FileInputStream(file);
        FileRegion region = new DefaultFileRegion(fis.getChannel(), 0, file.length());
        ctx.write(region);
        ctx.writeAndFlush("\n");
        fis.close();
    } else {
        ctx.writeAndFlush("File not found: " + file + '\n');
    }
}
 
开发者ID:nathanchen,项目名称:netty-netty-5.0.0.Alpha1,代码行数:19,代码来源:FileServer.java

示例15: doWrite

import io.netty.channel.FileRegion; //导入依赖的package包/类
@Override
protected void doWrite(ChannelOutboundBuffer in) throws Exception {
    for (;;) {
        Object msg = in.current(false);
        if (msg == null) {
            // nothing left to write
            break;
        }
        if (msg instanceof ByteBuf) {
            ByteBuf buf = (ByteBuf) msg;
            while (buf.isReadable()) {
                doWriteBytes(buf);
            }
            in.remove();
        } else if (msg instanceof FileRegion) {
            doWriteFileRegion((FileRegion) msg);
            in.remove();
        } else {
            in.remove(new UnsupportedOperationException(
                    "unsupported message type: " + StringUtil.simpleClassName(msg)));
        }
    }
}
 
开发者ID:nathanchen,项目名称:netty-netty-5.0.0.Alpha1,代码行数:24,代码来源:AbstractOioByteChannel.java


注:本文中的io.netty.channel.FileRegion类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。