第一范文网 - 专业文章范例文档资料分享平台

网络文件传输设计报告

来源:用户分享 时间:2025/6/3 3:27:43 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

import java.nio.ByteBuffer;

public class FileUtil {

private byte FileInfo = 0x1; ///文件信息上传命令

private byte FileDB = 0x2; ///文件数据传输命令

private int BlockSize = 512; ///规定文件块大小为512

public byte[] getFileInfoPack(String FileName, int FileSize) {

ByteBuffer buf = ByteBuffer.allocate(260); //分配一个新的字节缓冲区

byte[] infopack = new byte[260];

byte[] filename = new byte[255];

System.arraycopy(FileName.getBytes(), 0, filename, 0,

FileName.length()); //从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

buf.clear();

buf.put(FileInfo); //相对put方法(可选操作),将给定的字节写入此缓冲区的当前位置,然后该位置递增。

buf.putInt(FileSize); //用于写入 int 值的相对 put 方法(可选操作),

//将 4 个包含给定 int 值的字节按照当前的字节顺序写入到

此缓冲区的当前位置,然后将该位置增加 4。

buf.put(filename);

buf.flip();

buf.get(infopack);//此方法将此缓冲区的字节传输到给定的目标数组中

buf.compact();//将缓冲区的当前位置和界限之间的字节(如果有)复制到缓冲区的开始处

return infopack; }

public byte[] getFileDB(int index, int blocksize, byte[] data) {

byte[] filedb = new byte[9 + blocksize]; //对文件本身的传输过程定义

ByteBuffer buf = ByteBuffer.allocate(9 + blocksize);

buf.clear();

buf.put(this.FileDB);

buf.putInt(index);

buf.putInt(blocksize);

buf.put(data,0,blocksize);

buf.flip();

buf.get(filedb);

buf.compact();

return filedb; }

public int getBlockSize(){

return this.BlockSize; } } /*

*文件接受端线程的过程。

*/

import java.nio.channels.SocketChannel;

import java.nio.channels.SelectionKey;

import java.nio.channels.Selector;

import java.nio.ByteBuffer;

import java.io.RandomAccessFile;

import java.io.FileOutputStream;

import java.io.File;

import java.io.IOException;

import java.nio.channels.ClosedChannelException;

public class ReveiceThread extends Thread {

private FileUtil util = new FileUtil();

/*

* 针对面向流的连接套接字的可选择通道。

*/

private SocketChannel r_channel = null; //

private ByteBuffer buf = ByteBuffer.allocate(util.getBlockSize() + 9); //

public ReveiceThread(SocketChannel channel) throws Exception {

this.r_channel = channel;

this.r_channel.configureBlocking(false); }

public void run() {

try {

Selector selector = Selector.open();

SelectionKey key = r_channel.register(selector, SelectionKey.OP_READ);

buf.clear();

File file = null;

FileOutputStream fout = null;//文件输出流对象

RandomAccessFile raf = null;//创建临时文件对象

搜索更多关于: 网络文件传输设计报告 的文档
网络文件传输设计报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5jr556clap1is5207327_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top