一个2G的文本文件,要求不使用中间临时文件,如何实现所有内容的完全颠倒?(行也颠倒过来,每行字符都颠倒过来)比如文件内容如下:abcde
12345
你们好实现内容完全颠倒后:好们你
54321
edcba不使用中间文件,就是说只能在内存中读写该文件,但是文件有2G,超过一般内存。如何实现之?请使用Java或C++解答。谢谢!
12345
你们好实现内容完全颠倒后:好们你
54321
edcba不使用中间文件,就是说只能在内存中读写该文件,但是文件有2G,超过一般内存。如何实现之?请使用Java或C++解答。谢谢!
RandomAccessFile raf = new RandomAccessFile("C:\\big.txt","r");
long fLen = raf.length();
for (long n=fLen-1; n>=0; n--) {
raf.seek(n);
byte b = raf.readByte();
// write b to new file
}上面是基本方式,然后你还要考虑双字节问题,以及效率问题(按buffer读,不一个个byte读)。
如此。明白了没?
谁让你从文件末尾倒着一次把文件读到内存中的?你不会读一个字节写一个字节吗?
当然,要想提高效率肯定要使用buffer的,这点楼上很有经验,但是,对于java来说,是没有必要考虑双字节字符问题的,嘿嘿,楼主又可以省事了。
我的确糊涂了。边读边写(因为是同一个文件),用randomAccessFile指针要跳来跳去?
期待有更好的方法。
估计还是得考虑双字节问题。
反正就是seek来seek去了。
不知道同时开2个RandomAccessFile,2者同时读写一个文件会不会有lock问题。自己试试看吧。
国内专业的ACE网络编程、开发论坛开通:
www.acejoy.com
www.acedevelop.com
涉及ACE使用和开发,中间件、服务器端软件的设计,P2P技术,
socket网络编程、应用开发等内容。
欢迎加入,大家一起交流、学习成长!
真么大的文本,一个好算法是很重要的
免费的源码、工具网站,欢迎大家访问!
http://www.j2soft.cn/
═══════════════════
还没试过能不能打开
估计倒成了,也不知道有没有成功
------------------------
要求不使用临时文件的
要不然谁都会了
这样不管是c++还是java都很好做到,要知道jvm会爆的
里面的 内存映射文件 就可以满足楼主的要求。