请教如何提升BufferedWriter的性能

oracleperl 2019-09-09 09:12:55
如下代码,NAME+DEPT大概1000字节。
从数据库读取80000行,查询数据库耗时100毫秒
写入文件耗时500毫秒
我觉得是I/O次数较多,能否减少I/O次数,加快写盘速度?
谢谢

BufferedWriter bw = new BufferedWriter(new FileWriter(System.getProperty("user.dir")+"\\test.txt",false));
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection(DB, USER, PASS);
Statement cstmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = cstmt.executeQuery("select NAME,DEPT from test");
rs.setFetchSize(8000);
while (rs.next())
{
bw.write(rs.getString("NAME")+rs.getString("DEPT"));
}
...全文
541 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
亲爱的Joe 2019-09-10
  • 打赏
  • 举报
回复
我看你代码io次数是由你代码决定的,

while(rs.hasNext()){
     writer(rs.next())
}
这么一来,也就是有多少结果你就写入了多少次。 你要减少写入次数,可以看看能不能把整个rs结果集一次性写入一个流,然后把该流通过文件流输入到文件中去。
亲爱的Joe 2019-09-09
  • 打赏
  • 举报
回复
数据也不少,如何见得效率不高呢?况且还是写到硬盘上的
oracleperl 2019-09-09
  • 打赏
  • 举报
回复
引用 3 楼 亲爱的Joe 的回复:
[quote=引用 2 楼 oracleperl 的回复:] [quote=引用 1 楼 亲爱的Joe 的回复:] 数据也不少,如何见得效率不高呢?况且还是写到硬盘上的
比C/C++的fwrite慢很多很多[/quote] 哦,那倒是,java面向对象,肯定会牺牲一部分性能。 如果非要直接对java的BufferWriter进行优化的话,还真没办法,毕竟你总不能用自己的BufferWriter取代了java的BufferWriter吧。 [/quote] 不是牺牲一部分性能,是慢太多了。 BufferWriter是最快的写文件方式了吗? BufferWriter不能设置缓存吗?少几次I/O不行吗?
亲爱的Joe 2019-09-09
  • 打赏
  • 举报
回复
引用 2 楼 oracleperl 的回复:
[quote=引用 1 楼 亲爱的Joe 的回复:] 数据也不少,如何见得效率不高呢?况且还是写到硬盘上的
比C/C++的fwrite慢很多很多[/quote] 哦,那倒是,java面向对象,肯定会牺牲一部分性能。 如果非要直接对java的BufferWriter进行优化的话,还真没办法,毕竟你总不能用自己的BufferWriter取代了java的BufferWriter吧。
oracleperl 2019-09-09
  • 打赏
  • 举报
回复
引用 1 楼 亲爱的Joe 的回复:
数据也不少,如何见得效率不高呢?况且还是写到硬盘上的
比C/C++的fwrite慢很多很多

62,635

社区成员

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

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