格式化写文本的,你能高效的处理吗?

tinwoo 2006-08-14 03:25:57
每个域有固定长度,格式化写文本如下:
1xxxxxxx 2xxxxxxxxxxxxx 3xxxxxxxxxxx 4xxxxxxxxxx ...
1xxxxxxx 2xxxxxxxxxxxxx 3xxxxxxxxxxx 4xxxxxxxxxx ...
:
:

比如1xxxxxxx域长度占60个字符,2xxxxxxxxxxxx占100个字符,等等,写50万条这样的记录,你如何提高性能?
...全文
241 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
tinwoo 2006-08-15
  • 打赏
  • 举报
回复
自己顶一下吧
  • 打赏
  • 举报
回复
漏了点,我上面说的"内存地址已固定"的意思,是你可以用多线程.
  • 打赏
  • 举报
回复
很多人都提过内存库了,不仅是在减少数据IO方面,同时,对于格式化数据也是有作用的(只要有起始地址,那么所有数据段因为长度固定,所以地址也是固定的).

对楼主的建议就是,程序素来就是个变的东西,需要你不断检验.
谈论中最好的方法也不一定是对你的实际情况最好的办法,只有你有条件进行比较.最终应该是你最有发言权.
tinwoo 2006-08-15
  • 打赏
  • 举报
回复
最后一顶
tinwoo 2006-08-15
  • 打赏
  • 举报
回复
上楼:
只是在和大家讨论,并非卖关子,你误会了
  • 打赏
  • 举报
回复
是的,问题不要搞得太飘渺.总得有个讨论的基点.

格式化的问题,好像楼主挺在意,多次提及.
是有独到高见,还是都不会? 回复的人都没把它当个事来提,因为最简单和直接的方法在基础知识里就有了.还用说吗.如果楼主另有高见,就不要卖关子了.
hbwhwang 2006-08-15
  • 打赏
  • 举报
回复
上楼:
其实没有最高效的算法,只有相对比较高效的。
在IO操作这块,我一直的经验是BufferedInputStream和BufferedOutputStream相对比较高。
昨天有人提出nio,我已经用实际代码证明了,nio的效率相比BufferedIO,并没有优势。
还有人提出 内存映射文件 ,我虽然没有实证,但是我相信效率应该跟BufferedIO没有大的差别。
TinyJimmy 2006-08-15
  • 打赏
  • 举报
回复
需要找到你效率需要注意的地方, 如
1. 格式化字段
2. 数据IO

针对每个问题可以有不同的解决方案
1. 格式化
a)可用java直接Format方法
b)可用存储过程数据库生成好格式数据到临时表中,直接倒出(用主机能力)
c)如果主机性能OK,资源也够,可将数据库临时表放入内存, 降低物理IO, 也能加快生成效率
...
2. 数据IO
a)直接FileOutputStream写文件
b)使用StringBuffer,到了一定量再写
c)使用BufferWriter写
d)直接在主机上写完后,再一次性取出
...

Java本身的IO主要是用JNI完成的,效率很高.以前偶写的倒出程序, 从数据库取出, java IO, 一般情况下, 普通PC上执行, 不会低于2000条/秒
tinwoo 2006-08-15
  • 打赏
  • 举报
回复
上楼:
我现在还没有用方法实现,意图是找一种最高效的方法,所以请教大家.
hbwhwang 2006-08-15
  • 打赏
  • 举报
回复
tinwoo (稻草人) :
我想问你一下,
1、你现在用什么方法实现的?
2、需要多长时间?
3、在现有基础上,你想缩短多少?
hbwhwang 2006-08-14
  • 打赏
  • 举报
回复
该说的俺在上个帖子都说了,现在就是帮你顶了~
tinwoo 2006-08-14
  • 打赏
  • 举报
回复
上楼,你好像没有明白我的问题
zhmt 2006-08-14
  • 打赏
  • 举报
回复
try {
BufferedWriter out = new BufferedWriter(new FileWriter("filename", true));
out.write("aString");

// 这里继续写其它的。。。。

out.close();
} catch (IOException e) {
}

别人用这个写过数百M大小的文件,很快
zhmt 2006-08-14
  • 打赏
  • 举报
回复
大概用bufferedOutputStream吧,尽量一次io多输出一些数据。
zhmt 2006-08-14
  • 打赏
  • 举报
回复
努力接分升级中...帮你up!
tinwoo 2006-08-14
  • 打赏
  • 举报
回复
怎么减少?!
healer_kx 2006-08-14
  • 打赏
  • 举报
回复
对,减少IO的次数。
treeroot 2006-08-14
  • 打赏
  • 举报
回复
减少io次数
treeroot 2006-08-14
  • 打赏
  • 举报
回复
缓存

62,614

社区成员

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

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