A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fiend 中级黑马   /  2012-7-25 21:47  /  2556 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 fiend 于 2012-7-27 21:43 编辑

       这个问题没想太明白。就是关于给数据分段的问题,是什么时候分段?分好段,下回来是如何按顺序重组的?这个问题没看太明白。。。是用SequenceInputStream来合并的吗?希望知道的朋友帮忙告诉一下。谢谢。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 欢迎新同学...

查看全部评分

5 个回复

倒序浏览
RandomAccessFile 类
此类对象
特点:
⑴既能读取也可以写入。
⑵内部维护了一个大型的byte数组,通过对数组的操作完成读取和写入
⑶通过getFilePointer方法获取指针的位置,还可以通过seek方法设置指针的位置。
⑷该对象的内容应该封装了字节输入流和字节输出流
⑸该对象只能操作文件。
创建RandomAccessFile对象时,如果文件不存在则创建,如果文件存在则不创建。
public static void main(String[] args) throws IOException {
//writeFile();
//randomRead();
randomWrite();
}
/*
* 随机写入。
*/
public static void randomWrite()throws IOException{
RandomAccessFile raf = new RandomAccessFile("random.txt", "rw");
int num = 0;
raf.seek(8*num);
/*
* 写入第四个人的信息。王五 102.
*/
raf.write("张三".getBytes());
raf.writeInt(65);
raf.close();
}
/*
* 随机读取。
*/
public static void randomRead() throws IOException{
//读取任意一个人的信息,比如李四。
RandomAccessFile raf = new RandomAccessFile("random.txt", "r");
int n = 1;
//只要改变指针的位置,通过seek方法。
raf.seek(8*n);
byte[] buf = new byte[4];
raf.read(buf);//一次读四个字节并存储。
String name = new String(buf);
int age = raf.readInt();
System.out.println(name+".."+age);
System.out.println("pos:"+raf.getFilePointer());
raf.close();
}
/*
* 读取数据。random.txt 使用RandomAccessFile.
*/
public static void readFile() throws IOException{
RandomAccessFile raf = new RandomAccessFile("random.txt","r");
byte[] buf = new byte[4];
raf.read(buf);//一次读四个字节并存储。
String name = new String(buf);
int age = raf.readInt();
System.out.println(name+".."+age);
raf.close();
}
/*
* 通过RandomAccessFile类创建文件并给文件中写入数据。
* 数据以:姓名+年龄为主的个人信息。
*/
public static void writeFile() throws IOException{
/*
* 创建RandomAccessFile对象时,如果文件不存在则创建,
* 如果文件已存在,则不创建。
*/
RandomAccessFile
raf = new RandomAccessFile("random.txt","rw");
raf.write("张三".getBytes());
raf.writeInt(97);
raf.write("李四".getBytes());
raf.writeInt(99);
raf.close();
}
}
通过seek方法操作指针,可以从这个数组中的任意位置上进行读和写。可以完成对数据
的修改,但是注意:数据必须有规律。
RandomAccessFile raf=new RandomAccessFile(“ran.txt”,”r”)
//调整对象中的指针
raf.seek(8*1)
//跳过指定的字节数
raf.skipBytes(8)
byte[ ] buf=new Byte[4]
raf.read(buf)
String name=new String(buf)
System.out.println(name )
raf.close()

RandomAccessFile raf=new RandomAccessFile(“ran.txt”,”r”)
Raf.seek(8*3)
raf.write(“周期”.getBytes())
raf.writeInt(103)
raf.close()

回复 使用道具 举报
聂峰 发表于 2012-7-25 21:59
RandomAccessFile 类
此类对象
特点:

哥们,这个我知道。。。这视频里面都有,我是说多线程下载的问题。。。数据分段是如何进行的。是如何重组的。
回复 使用道具 举报
大概说一下思路把 具体细节名字不记得了 首先获得你要下载的资源的总的字节的长度 然后根据设定的线程的数目 计算出每一条线程要下载的长度 (长度稍微长点 短点 没关系 不需要很准确) 然后 新建一个目标RandomAccessFile 长度设定与源文件的长度相同 每一条线程根据自己负责的位置用一个方法定位到那个位置 开始下载 每一条线程都下载完成了就算完成 .
ps: 做完 可以尝试下实现断点下载

回复 使用道具 举报
张锐 发表于 2012-7-26 10:28
大概说一下思路把 具体细节名字不记得了 首先获得你要下载的资源的总的字节的长度 然后根据设定的线程的数 ...

好像明白了,随机存取也可以在网络上实现,应该是这样吧。我一直把思维局限在本地了。
回复 使用道具 举报
RandomAccessFile里的绝大多数功能已经被nio取代了,我也没怎么具体研究过,待会去了解下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马