读取文件的指定位置
来源:互联网 发布:java工程师评等级s1 编辑:程序博客网 时间:2024/04/29 17:06
今天需要读取/写入一个二进制文件的指定位置处,遇到这个问题时的首先想到的是可以用 BinaryReader 读取文件,但是怎么定位到指定的位置,却一时不知怎样解决。首先查看 BinaryReader 的方法和属性,没有发现直接的方法。但问题是一定要解决的,那只好先采取间接地方法了,于是只好采用最笨的方法了,就是将流的当前位置移动到指定的位置处。方法如下:
BinaryReader br = new BinaryReader(File.OpenRead(@"D:/TEST.txt"));
int offset = 1024;//指定移动的次数
for (int i = 0; i < offset; i++)
{
br.ReadInt32();
}
这样流的当前位置就移到了 1024*4 处。
问题虽然解决了,但方法很原始,效率肯定也不是很好。总觉得应该有直接定位到文件指定位置的方法。于是又重新看了一下 BinaryReader 中的方法和属性。方法中确定没有直接的方法,剩下的希望只能寄托在唯一的属性 BaseStream 上面了,进一步查看 Stream 中的方法和属性,终于发现了方法 Seek ——当在派生类中重写时,设置当前流中的位置。至此,问题算是找到一个较好的解决方法了。因此上面的那段代码更新如下:
BinaryReader br = new BinaryReader(File.OpenRead(@"D:/TEST.txt"));
br.BaseStream.Seek(1024* 4, SeekOrigin.Begin);
问题解决。
上面提到的知识读取二进制文件的指定位置,对于读写其它文件(如文本文件)的方法应该雷同,在此不再赘述。
扩展话题:
两个方法到底是否如预料中一样——后者的效率高呢?
后本做了一些小的测试,但不是使用专门的测试软件
发现并不是所有情况下后者的效率高,后者的耗时是个定值,前者的耗时随偏移量的增大而增大。所以具体使用哪种方法最好视情况而定。
- 读取文件的指定位置
- 文件的指定位置读取内容
- python读取指定字节及位置的文件内容
- java读取excle指定位置的数据
- java读取excel指定的位置
- 扫描指定位置的指定文件
- 在文件指定位置读取和写入内容RandomAccessFile
- 在文件指定位置读取和写入内容RandomAccessFile
- Flume 配置和读取tomcat文件到指定位置
- android 从指定的位置得到指定文件名的文件
- 从软盘启动并读取指定文件内容到指定位置内存
- 修改文件指定位置
- 读取指定URL连接的文件内容
- c#读取指定目录的所有文件
- shell读取文件的指定行字符串
- Java读取指定文件的内容
- java 读取文件指定行的内容
- VC逐行读取指定文件的内容
- 脚本执行异常(bad interpreter: No such file or directory)的解决方法
- Hibernate事务和并发控制
- linux的符号链接 && mkimage.sh及cpio打包过程分析
- 吴磊 2010年 的思考题
- asp.net文件操作类
- 读取文件的指定位置
- 递归
- ADO.NET_介绍
- linux:vi 替换命令
- perl tk hello world
- OSGi R4.2 public draft中新增加的Framework launch
- 在Eclipse中用JDBC连接Sql Server
- java分页 Struts+Ibatis
- 小技巧要你命三千之:checkbox radio select 只读效果