ファイルをソケットでコピーする最も速い方法はどれですか?私はいくつかの方法を試しましたが、転送とCPU使用に関する最速の方法を見つけたとは確信していません。 (ベストの結果:175mBit /秒(SSD /ギガビット・ネットワーク))ソケットを介してファイルをコピーする最速の方法
サーバー:
ByteBuffer bb = ByteBuffer.allocate(packet_size);
DataOutputStream data_out = new DataOutputStream(socket.getOutputStream());
while(working){
int count =0;
int packet_size = in.readInt();
long pos = in.readLong();
if(filechannel.position()!=requested_pos){
filechannel.position(requested_pos);
}
bb.limit(packet_size);
bb.position(0);
if((count=filechannel.read(bb))>0){ //FileInputStream.getChannel()
data_out.writeInt(count);
data_out.write(bb.array(),0,count);
}else{
working=false;
}
}
はクライアント:
for(long i=0;i<=steps;i++){
data_out.writeInt(packet_size); //requested packet size
data_out.writeLong(i*packet_size); //requested file position
count=in.readInt();
bb.clear();
bb.limit(count);
lastRead=0;
while(lastRead<count){
lastRead+=in.read(bytes,lastRead,count-lastRead);
}
bb.put(bytes,0,count);
bb.position(0);
filechannel.write(bb); // filechannel over RandomAccessFile
}
任意の提案ですか?
ブロックを圧縮し、もう一方の端で解凍することができます。たとえば、すばらしいJavaの試用を試みる – qwr