多线程读同一个文件 进者有分

ansili521 2007-12-22 12:05:00
多线程读同一个文件..不知道从何下手.
希望给一demo
ansili@qq.com..
...全文
1467 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
adverse 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 ansili521 的回复:]

现在读取告一段了.
怎么.以最快的速度把这样数据插入到数据库中呢?.
我不知道怎么搞的. 数据量一多.就会出错,说二进制转换出错.
迷糊中..
[/Quote]
数据库中建立Clob类型的字段,从文件里读一部分,就写一部分到Clob里面,这样不会占太多内存。可考虑使用。
peng_weida 2010-11-14
  • 打赏
  • 举报
回复
占位 啊
ansili521 2008-01-06
  • 打赏
  • 举报
回复
. 我也想用C呀. 可关键是我C的水平太差了
还不能达到. 操作数据库的程度..
太空眼睛 2008-01-06
  • 打赏
  • 举报
回复
我觉得, 当一个需求非常关注效率的时候, 可以考虑用C来读取这么大的文件, 楼主试过Java也试过C#, 为什么不
试一下用C呢, 因为在java语言中, String这个类是不可改变的常量字符串, 每一次对String进行赋值的时候都会
new一块内存, new所耗费的时间代价太高了, 更何况是反复的new, 而C中的字符指针只会new一次, 只要第一次
new一个适合的空间, 然后就可以读取文件和写入数据库, 这样时间开销要比java中的String开销要小几个数量
级, C语言在底层的操作效率要比其它很多语言都要高效.
sunyujia 2008-01-06
  • 打赏
  • 举报
回复
io通道只有一个你多线程没什么意义,我认为
HoToo 2008-01-06
  • 打赏
  • 举报
回复
up.jf
DiligencyMan 2008-01-06
  • 打赏
  • 举报
回复
为什么要用多线程呢?如果一个文件很小的话,直接开->操作->关闭就得啦,何必来个多线程呢?
假如一个文件很大的话,你用多线程岂不是很麻烦而且费力不讨好啊!
  • 打赏
  • 举报
回复
往数据库里面插入的话,只能用INSERT插入了,还能有什么办法?

或者把处理好的数据写回到文件中,采用CSV格式用逗号分开,一般
数据库都有导入CSV格式数据功能的,这样速度会快一些。
asukamk2 2008-01-03
  • 打赏
  • 举报
回复
需求不明~友情UP
ansili521 2008-01-02
  • 打赏
  • 举报
回复
现在读取告一段了.
怎么.以最快的速度把这样数据插入到数据库中呢?.
我不知道怎么搞的. 数据量一多.就会出错,说二进制转换出错.
迷糊中..
sophia_tll 2007-12-30
  • 打赏
  • 举报
回复
RandomAccessFile 按行读取的效率并不高,我试着用它读取4.41M的文本文件,花费了5984毫秒
建议改用BufferedReader,它的效率明显较高,同样的文件,读取花费172毫秒。
可以实际测试一下,以作比较。

-------------用RandomAccessFile 读的代码------------------------
RandomAccessFile random = new RandomAccessFile( "D:\\xxx.data", "r");
String line = null;
long startTime = System.currentTimeMillis();
while ((line = random.readLine()) != null) {
//do nothing, only read
}
System.out.println("时间:" + (System.currentTimeMillis() - startTime));

--------------用BufferedReader 读的代码--------
FileInputStream fileStream = new FileInputStream("D:\\xxx.data");
BufferedReader reader = new BufferedReader(new InputStreamReader(
fileStream));

String line = null;
long startTime = System.currentTimeMillis();
while ((line = reader.readLine()) != null) {
//do nothing, only read
}
System.out.println("时间:" + (System.currentTimeMillis() - startTime));

willing008 2007-12-29
  • 打赏
  • 举报
回复
学习下!
ansili521 2007-12-29
  • 打赏
  • 举报
回复
我的主要目的是. 提速.不管用什么方法只要能在5分钟内读取出来就行了
现在一直没找到好的方法丫.
ansili521 2007-12-28
  • 打赏
  • 举报
回复
这几天忙了点别的.没时间看这帖子.
不好意思
只是读. 不要考虑同步吧.只要全读取出来. 没有重复的 速度也是关键
我初步看了一下RandomAccessFile不可以读取出来之后不能一行一行的取
因为我现在要把每一次又插入到数据库中.
我用C#也试着做这个.结果效率不是让人很满意
5分钟只读数据..我想一定可以读取出来的
还得接着找资料
snake09003232 2007-12-28
  • 打赏
  • 举报
回复
学习了.....
胡矣 2007-12-28
  • 打赏
  • 举报
回复
友情UP
海会圣贤 2007-12-28
  • 打赏
  • 举报
回复
为什么要用多线程来读一个文件啊
UP一下吧
ansili521 2007-12-28
  • 打赏
  • 举报
回复

//这样做一定不行. 我算了一下读1.75M的数据在20S
如果是1.2G的话大约在两百多钟吧.
不知道还耍要怎么优化一下
RandomAccessFile random = new RandomAccessFile("C:\\a.txt","r");
String line=null;
int k=0;
java.util.Date da = new Date();

while((line=random.readLine())!=null){
// if()
System.out.println(new String(line.getBytes("iso8859-1")));
}
System.out.println("时间:"+((new Date()).getTime()-da.getTime()));
ws010 2007-12-27
  • 打赏
  • 举报
回复
多线程
lpingxh 2007-12-27
  • 打赏
  • 举报
回复
要是读的话是不用考虑同步的。。。
加载更多回复(33)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧