- 浏览: 83404 次
文章分类
- 全部博客 (136)
- 我的技术资料收集 (98)
- 具体技术 (1)
- 的技术资料收集 (4)
- All Articles (1)
- 机器学习 Machine Learning (1)
- 网络编程 (1)
- java (2)
- ava (1)
- 零散技术 (1)
- C# (3)
- 技术资料收集 (1)
- CQRS (1)
- 数据库技术(MS SQL) (1)
- .Net微观世界 (1)
- Oracle SQL学习之路 (1)
- C/C++ (1)
- JS/JQ (1)
- Js封装的插件/实例/方法 (2)
- 敏捷个人 (2)
- Javascript (1)
- 程序设计---设计模式 (1)
- Bug (1)
- 未知分类 (1)
- 程序设计 (1)
- Sharepoint (1)
- Computer Graphic (1)
- IT产品 (1)
- [06]JS/jQuery (1)
- [07]Web开发 (1)
- .NET Solution (1)
- Android (3)
- 机器学习 (1)
- 系统框架设计 (1)
- Others (1)
- 算法 (1)
- 基于Oracle Logminer数据同步 (1)
- 网页设计 (1)
- 原创翻译 (1)
- EXTJS (1)
- Jqgrid (1)
- 云计算 (1)
最新评论
原帖地址:http://www.cnblogs.com/idayln/archive/2013/05/29/3106487.html
IO流体系结构
在上篇中,已经写下了IO流概念以及对File类操作,如果想查阅上篇的内容,请点击这里: http://www.cnblogs.com/idayln/archive/2013/05/27/3102810.html . 此文是它的姊妹篇!本文以Demo为主,不会涉及太多概念!!!
- 输入流: InputStream/Reader 拥有一系列read方法
- InputStream 是字节输入流的超类
- Reader是字符输入流的超类
- 输出流: OutputStream/Writer 拥有一系列write方法
- OutputStream 字节输出类的超类
- Writer 字符输出流的超类
输出流代码:
1 static void demo0() throws Exception {
2 try (OutputStream outputStream = new FileOutputStream("demo1.txt")) {
3 outputStream.write("First 'demo' for how to use 'OutputStream' !"
4 .getBytes());
5 }
6 System.out.println("Over");
7 }
看到这段代码,是不是感觉有点奇怪?别紧张.
- 上段代码是Java 7中异常新特性:try-with-resources: 它可以自行进行资源管理,例如上例就不需要手动close;需要注意的是:try(/* 此处可以是代码块 */),这种语法节省的好多代码。
- OutputStream是个抽象类,它必须通过子类来进行实例化。
- OutputStream主要分为二种功能
- 字入数据的write系列方法
- 参数为byte: 单一字节
- 参数为byte数组
- 参数为byte数组和数组中的起始位置与长度
- 流的控制
- 关闭:close
- 刷新保存:flush: 其实不必手动flush。第一:当内部缓冲期满过,它会自动自动执行flush;第二:当invoke close方法时,会自动执行flush。
- 字入数据的write系列方法
输入流代码:
1 static void demo1() throws IOException{
2 InputStream inputStream =null;
3 try {
4 inputStream = new FileInputStream("demo0.txt");
5 byte[] bb = new byte[1024]; //缓冲区
6 int temp;
7 while((temp=inputStream.read(bb))!=-1){
8 System.out.println(new String(bb, 0, temp));
9 }
10 } catch (FileNotFoundException e) {
11 // TODO Auto-generated catch block
12 e.printStackTrace();
13 }finally{
14 if(inputStream!=null){
15 inputStream.close();
16 }
17 }
18 }
InputStream:
- 上段采用Java 6的语法,是不是明显感觉到代码量增多:从7行增加到18行。
- 与OutputStream一样是个抽象类。因为它们都是比较早设计的类,因此并没有采用流行的面向接口编程思想。
- 与OutputStream一样也主要有二个功能:read系列方法,但是它的流的控制没有flush而是添加了skip,mark这二个方法,平时用得少,感兴趣的同学可以自行去查API。
Reader,Writer与InputStream,OutputStream基本功能相,这里就不在解释。深入理解了InputStream与OutputStream之后,学其它就很快;对于不同的处理流,查API就行!!
附上IO流体系结构表:
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
抽象基类 | InputStream | OutputSteam | Reader | Writer |
文件 | FileInputStream | FileOutputSteam | FileReader | FileWriter |
数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
缓冲 | BufferedInputStream | BufferedOutputStream | BufferdReader |
BufferWriter |
对象 | ObjectInputStream | ObjectOutputStream | ||
转换 | InputStreamReader | OutputStreamWriter | ||
打印 | PrintStream | PrintWriter | ||
字符串 | StringReader | StringWriter | ||
管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
这多类,该如何记忆,理解呢? 我是这么理解的。
首先把它们大致划分为:节点流与处理流。节点流就是直接与物理节点,进行交互;而处理流通常直接处理的对象是节点流,是再上一层的包装。
比如:如果想对read操作进行同步缓冲,可以使用BufferedInputStream:
1 static void demo2() throws Exception{
2 InputStream inputStream =null;
3 BufferedInputStream bufferedInputStream =null;
4 try {
5 inputStream = new FileInputStream("demo0.txt");
6 bufferedInputStream = new BufferedInputStream(inputStream);
7 byte[] bb = new byte[1024];
8 int temp=-1;
9 while((temp=bufferedInputStream.read(bb))!=-1){
10 System.out.println(new String(bb,0,temp));
11 }
12 } catch (FileNotFoundException e) {
13 // TODO Auto-generated catch block
14 e.printStackTrace();
15 }finally{
16 if(inputStream!=null){
17 inputStream.close();
18 }
19 }
20 }
RandomAccessFile: 任意访问内容类:既可以读取文件内容,也可以向文件输出数据,可以自由访问文件的任意位置,它可以自由定位文件记录指针。
二个重要方法:
- long getFilePointer(): 获取文件记录的当前指针位置
- void seek(long position): 将文件的记录指针特定position的位置。
使用RandomAccessFile 必须要设置模式:
- r: 只读
- rw: 读写,如果不存在,则自动创建。
- rws: 读写,读文件内容与元数据改动都会同步更新到Target Device上;
- rwd:与rws类似,差别在于,当元数据改动后,不会同步更新到Target Device
1 static void demo3() throws Exception{
2 RandomAccessFile file = new RandomAccessFile("demo0.txt", "rw");
3 System.out.println("Before invoke write:"+file.getFilePointer());
4 file.seek(file.length());
5 file.write("\nUsing RandomAccessFile Class".getBytes());
6
7 System.out.println("After invoke write:"+file.getFilePointer());
8 file.seek(0);
9 byte[] bb = new byte[1024];
10 int temp=-1;
11 while ((temp=file.read(bb))>0) {
12 System.out.println(new String(bb,0,temp));
13 }
14
15 file.close();
16 }
如果要在指定的位置进行插入内容,那必须得把指定位置的内容进行缓存,不然会被替代。
1 static void demo4(String fileName,long position,String content) throws Exception{
2 RandomAccessFile file = new RandomAccessFile(fileName, "rws");
3 File tempFile = File.createTempFile("temp", null);
4
5 long currentLength = file.length();
6 if(position>currentLength){
7 return;
8 //Maybe you can setup position=currentLenght; Also you can setup anything what you want !!!
9 }
10 FileOutputStream fileOutputStream = new FileOutputStream(tempFile); // write data to "temp" file
11 FileInputStream fileInputStream = new FileInputStream(tempFile); // read data
12 byte[] bb = new byte[512];
13 int tempNum=-1;
14
15 file.seek(position);
16
17 while((tempNum=file.read(bb))>0){
18 fileOutputStream.write(bb, 0, tempNum);
19 }
20
21 file.seek(position); // Go back to position
22 file.write(content.getBytes());
23
24 while((tempNum=fileInputStream.read(bb))>0){
25 file.write(bb, 0, tempNum);
26 }
27
28 tempFile.deleteOnExit();
29 if(fileInputStream!=null){
30 fileInputStream.close();
31 }
32 if(fileOutputStream!=null){
33 fileOutputStream.close();
34 }
35
36 file.close();
37 }
发表评论
-
C#WebBrowser控件使用教程与技巧收集--苏飞收集 - sufeinet
2013-06-28 12:07 1064原帖地址:http://www.cnblogs.com/suf ... -
我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】
2013-06-28 12:01 1124原帖地址:http://www.cnblogs.com/lao ... -
[翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
2013-06-28 11:43 619原帖地址:http://www.cnblogs.com/ese ... -
memcahd 命令操作详解 - 阿正-WEB
2013-06-28 11:37 468原帖地址:http://www.cnblogs.com/azh ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 589原帖地址:http://www.cnblogs.com/ste ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 554原帖地址:http://www.cnblogs.com/ste ... -
RPG游戏之组队测试 - zthua
2013-06-27 10:22 554原帖地址:http://www.cnblogs.com/zth ... -
IT人们给个建议 - SOUTHER
2013-06-26 14:06 521原帖地址:http://www.cnblogs.com/sou ... -
Java向前引用容易出错的地方 - 银河使者
2013-06-26 14:00 491原帖地址:http://www.cnblogs.com/nok ... -
使用Func<T1, T2, TResult> 委托返回匿名对象 - 灰身
2013-06-26 13:54 796原帖地址:http://www.cnblo ... -
【web前端面试题整理03】来看一点CSS相关的吧 - 叶小钗
2013-06-25 10:45 781原帖地址:http://www.cnblogs.com/yex ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 10:27 615原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 10:21 560原帖地址:http://www.cnblo ... -
CentOS下Mysql安装教程 - 小学徒V
2013-06-23 15:24 606原帖地址:http://www.cnblogs.com/xia ... -
vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) - skyme
2013-06-23 15:18 834原帖地址:http://www.cnblogs.com/sky ... -
之前专门为IE6、7开发的网站如何迁移到IE10及可能遇到的问题和相应解决方案汇总 - 海之澜
2013-06-23 15:12 945原帖地址:http://www.cnblogs.com/wuz ... -
Android学习笔记--解析XML之SAX - 承香墨影
2013-06-23 15:01 406原帖地址:http://www.cnblo ... -
SQL Server 性能优化之——T-SQL TVF和标量函数
2013-06-19 09:32 666原帖地址:http://www.cnblogs.com/Boy ... -
Nginx学习笔记(二) Nginx--connection&request
2013-06-19 09:26 659原帖地址:http://www.cnblogs.com/cod ... -
从郭美美霸气侧漏看项目管理之项目经理防身术
2013-06-19 09:20 497原帖地址:http://www.cnblogs.com/had ...
相关推荐
在Android开发中,有时我们需要遍历应用程序的根目录,查找并处理其中的所有文件。这个过程通常涉及到Java的I/O操作和Android的ListActivity组件。本文将深入探讨如何将这两个技术结合,实现查找并显示程序根目录下...
Android提供了多种I/O机制,使得开发者能够有效地读写文件、处理流数据以及与网络通信。以下将详细介绍Android I/O操作的相关知识点。 1. 文件操作: - `File`类:用于创建、读取、写入、删除文件和目录。通过构造...
在Android开发中,I/O流是处理数据输入输出的基础工具,对于任何涉及文件读写、网络通信的应用来说都至关重要。本项目通过具体的源码示例,帮助开发者理解和掌握如何在Android环境中高效、灵活地运用I/O流。 首先,...
这些问题涵盖了Android开发的不同知识点,如Java I/O流、编程基本概念、字符串处理、内存管理、条件判断、Activity生命周期、Intent使用、XML解析技术、自定义样式的定义、SQL Server数据库操作等。这些知识点对...
通过利用协程的挂起机制,可以在非阻塞的方式下执行 I/O 密集型操作。 2. **异步 TCP 客户端/服务器**:Korio 提供了构建高性能、非阻塞的 TCP 通信的能力,支持客户端连接和服务器监听,这在处理大量并发连接时...
在Android开发中,输入/输出(I/O)操作是非常重要的一个环节,它涉及到设备与外部世界的数据交换,包括通过网络、存储设备等多种途径进行数据的读取与写入。深入理解Android的I/O概念对于开发者来说至关重要,这有...
通过学习这个项目,开发者可以掌握如何在Android环境下进行网络编程,以及如何高效地处理二进制数据,这对于开发涉及网络通信的Android应用非常有价值。在实际应用中,还可以根据需求扩展到其他类型的数据传输,如...
在Android开发中,理解并熟练掌握I/O流(InputStream和OutputStream)的使用至关重要。IOStreamSample项目旨在深入解析Android平台下的输入输出流操作,帮助开发者更好地理解和应用这些核心概念。本文将详细探讨...
在Android开发中,I/O(Input/Output)操作是至关重要的,特别是在处理数据存储、文件读写、网络通信等方面。本示例“Android示例”着重于“io测试”,意在展示如何在Android环境中有效利用Java的I/O流进行各种操作...
首先,Android系统基于Java,因此它的I/O流库与Java的标准I/O库相似。在Java中,`java.io`包提供了处理输入输出的基本类,如`InputStream`和`OutputStream`。这些类是所有输入和输出操作的基础,但它们处理的是原始...
这可能导致性能问题,因此在高并发场景下,可以考虑使用非阻塞I/O或异步I/O。 HTTP与Socket的区别在于,HTTP是基于TCP的应用层协议,它提供了更高级别的请求/响应模型,包括方法(GET, POST等)、状态码、头部信息...
【Android大作业.zip】是一个包含了两个重要项目的压缩文件,这些项目是针对Android开发的学习与实践。根据提供的描述,我们可以深入探讨这两个项目所涉及的关键知识点。 ### 第1题:网络通信程序 这个项目要求在...
- **文件与I/O流**:掌握文件操作及输入输出流的基本用法。 - **多线程**:了解多线程编程的基本原理和常见问题。 - **网络编程**:学习如何在网络环境下进行数据传输和通信。 - **图形用户界面**:利用Java AWT和...
OpenGL在Android开发中被广泛用于实现高性能的图形渲染,其中包括处理视频帧的YUV数据。YUV是一种常见的视频编码格式,常用于节省带宽和存储空间,因为它是为彩色视频设计的一种分量编码方式,不同于RGB这样的像素...
Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商...
在游戏保存的上下文中,Stream可能被用来读取或写入文件,但请注意,这里的“Stream”更可能指的是I/O流,而不是Java的Stream API。 3. **I/O流**:在Java中,输入/输出流(Input/Output Stream)是处理数据传输的...
5. **输入/输出(I/O)**:理解Java I/O流系统,如何读写文件和网络通信。 6. **Java与Android API的接口**:介绍如何将Java代码与Android SDK中的特定类和接口结合,以实现Android特有的功能。 另一方面,...
在Java和Android开发中,文件流(IO,Input/Output)是进行数据读写的核心机制。文件流IO允许程序从磁盘、网络或其他输入源读取数据,或将数据写入到输出目标,如磁盘、网络或打印机。下面将详细探讨文件流IO的基本...
根据提供的文件信息,我们可以梳理出关于Android开发的一系列知识点。首先,文件中提到“Android...希望这些知识点能够帮助开发者在Android开发之路上更进一步,同时在面试和笔试中有所准备,为求职和职业发展加分。
在Android平台上开发一个MP3播放器涉及...通过这个源码,你可以学习到如何将以上知识点有效地整合到一个实际项目中,这对于提升Android开发技能非常有帮助。同时,分析和调试源码也能加深对Android系统底层机制的理解。