java 零拷贝_java 通过零拷贝实现有效数据传输

package sendfile;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.net.InetSocketAddress;

import java.net.SocketAddress;

import java.nio.channels.FileChannel;

import java.nio.channels.SocketChannel;

public class TransferToClient {

public static void main(String[] args) throws IOException{

TransferToClient sfc = new TransferToClient();

sfc.testSendfile();

}

public void testSendfile() throws IOException {

String host = "localhost";

int port = 9026;

SocketAddress sad = new InetSocketAddress(host, port);

SocketChannel sc = SocketChannel.open();

sc.connect(sad);

sc.configureBlocking(true);

String fname = "sendfile/NetworkInterfaces.c";

long fsize = 183678375L, sendzise = 4094;

// FileProposerExample.stuffFile(fname, fsize);

FileChannel fc = new FileInputStream(fname).getChannel();

long start = System.currentTimeMillis();

long nsent = 0, curnset = 0;

curnset =  fc.transferTo(0, fsize, sc);

System.out.println("total bytes transferred--"+curnset+" and time taken in MS--"+(System.currentTimeMillis() - start));

//fc.close();

}

}

package sendfile;

import java.io.IOException;

import java.net.InetSocketAddress;

import java.net.ServerSocket;

import java.nio.ByteBuffer;

import java.nio.channels.ServerSocketChannel;

import java.nio.channels.SocketChannel;

public class TransferToServer  {

ServerSocketChannel listener = null;

protected void mySetup()

{

InetSocketAddress listenAddr =  new InetSocketAddress(9026);

try {

listener = ServerSocketChannel.open();

ServerSocket ss = listener.socket();

ss.setReuseAddress(true);

ss.bind(listenAddr);

System.out.println("Listening on port : "+ listenAddr.toString());

} catch (IOException e) {

System.out.println("Failed to bind, is port : "+ listenAddr.toString()

+ " already in use ? Error Msg : "+e.getMessage());

e.printStackTrace();

}

}

public static void main(String[] args)

{

TransferToServer dns = new TransferToServer();

dns.mySetup();

dns.readData();

}

private void readData()  {

ByteBuffer dst = ByteBuffer.allocate(4096);

try {

while(true) {

SocketChannel conn = listener.accept();

System.out.println("Accepted : "+conn);

conn.configureBlocking(true);

int nread = 0;

while (nread != -1)  {

try {

nread = conn.read(dst);

} catch (IOException e) {

e.printStackTrace();

nread = -1;

}

dst.rewind();

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值