- 浏览: 16580 次
- 性别:
- 来自: 广州
最新评论
IO(Input OutPut)流
IO流用来处理设备之间的数据传输
JAVA对数据的操作是通过流的方式
JAVA用于操作流的对象都在IO包中
流按操作对象分为两种: 字节流,字符流
流按流向分为: 输入流,输出流.
其它的内容还是比较简单的,注意的是以下这几个自定义包装类:
实现1.
MyBufferedReader.class
package com.javami.kudy.Code13; import java.io.IOException; import java.io.Reader; //读取字符流的抽象类 import java.io.IOException; /* * 自定义MyBufferedReader包装Reader,提供了一个缓冲区的功能.提供了ReadLine功能. * 1.用一个次组合,拿到被包装的Reader对象 * 2.定义一个字符数组作为缓冲区 * 3.实现一个read方法,填充缓冲区,从缓冲区那里返回一个字符 * 4.定义一个readLine方法,内部调用read方法,循环读取一行,进行返回 * 5.定义一个close方法,关闭地底层所包装的流 */ public class MyBufferedReader extends Reader{ private Reader r; char[] buf = new char[1024]; int len =0; int pos = 0; public MyBufferedReader(Reader r) { this.r = r; } /* * 实现read()方法,实现缓存的功能 * 分析: * 1.当别人第一次调用该方法的时,一次性的去填充缓冲区 * 2.定义一个len变量记住缓冲区的可用字符的数量 * 3.将数组的第一个元素返回 * 4.当别人第二次调用的时,将数组的二个元素返回 * 5.每次返回元素 len -- * 6.当len为零时,说明数组没有可用字符啦,那么这时候返回一个-1 * * 思路: * 1.定义两个成员变量,len记住可用字符数量,pos记住当前字符的角标 * 2.判断len是否为0,如果为零要填充缓冲区.并且pos为零 * 3.判断len,如果为-1,则返回-1 * 4.将pos位置的元素返回.pos++ */ public int read() throws IOException { if(len ==0) { len = r.read(buf); pos = 0; } if(len==-1) return -1; len--; return buf[pos++]; } /* * 实现readLine方法,实现读一行的功能, * 1.循环调用自己的方法的read方法,读取字符 * 2.知道回车的字符,方法就结束 */ public String readLine() throws IOException { StringBuilder sb = new StringBuilder(); int ch; while((ch=read())!=-1) { if(ch=='\r') continue; if(ch=='\n') break; sb.append((char)ch); if(ch==-1&&sb.length()==0) return null; } return sb.toString(); //转换成字符串 } @Override public void close() throws IOException { r.close(); } @Override public int read(char[] cbuf, int off, int len) throws IOException { int count=0; for(int i=0; i<off+len; i++) { int ch = read(); if(ch==-1) break; count++; buf[i] = (char)ch; } return count; } }
MyBufferedWriter.class 这个主要是写入
package com.javami.kudy.Code13; import java.io.IOException; import java.io.Writer; public class MyBufferedWriter extends Writer{ private Writer w; private char[] buf = new char[1024]; private int pos = 0; public MyBufferedWriter(Writer w) { this.w = w; } /* * 定义Writer方法,实现写一个字符,实现缓存的功能 * 1.定义一个变量pos记住当前的写入位置 * 2.每次调用都使用这个方法都会传入一个字符,将字符缓存到数组pos位置里面去 * 3.pos++ * 4.每次上来就判断,如果pos =1024,刷新缓冲区 ,pos = 0 */ public void Writer(int ch)throws IOException { if(pos == 1024) { flush(); //刷新一下缓冲区.并且初始化为零 pos = 0; } buf[pos++] = (char)ch; } @Override public void close() throws IOException { flush(); w.close(); } @Override public void flush() throws IOException { w.write(buf,0,pos); //把buf0-pos位置的内容写入进去 } public void writer(String data)throws IOException { char[] chars = data.toCharArray(); //转换成字符 for(char c : chars) write(c); } public void newline()throws IOException { write("\r\n"); //所谓的换行就是一个 } @Override public void write(char[] cbuf, int off, int len) throws IOException { for(int i=0; i<off+len; i++) { w.write(buf[i]); } } }
由于每次都要关闭流啊~~无奈.只好使用一个类来实现它们
CloseUtil.class
package com.javami.kudy.Code13; import java.io.IOException; import java.io.Reader; import java.io.Writer; public class CloseUtil { private CloseUtil(){} public static void close(Reader r,Writer w)throws IOException { try { if(r!=null) r.close(); } finally { if(w!=null) w.close(); } } }
一个简单的测试类:
package com.javami.kudy.Code13; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public abstract class BufferedTest { /** * @param args */ public static void main(String[] args) { MyBufferedReader mr = null; MyBufferedWriter mw = null; try { mr = new MyBufferedReader(new FileReader("src/a.txt")); mw = new MyBufferedWriter(new FileWriter("src/b.txt")); int len; while((len=mr.read())!=-1) { mw.Writer(len); } } catch(IOException e) { e.printStackTrace(); } finally { try { CloseUtil.close(mr, mw); } catch(IOException e) { } } } }
BufferedReader 与 BufferedWriter 的存储图:
以上这几个都是比较难理解的..~~
加油啦..
发表评论
-
javase_22(TCP的理解)
2012-09-02 19:43 647TCP传输 Socket(客户端)和ServerSocket( ... -
javase_21(DUp的学习-->*)
2012-08-30 00:45 728Socket网络编程 网络协议 IP地址与端口号 本 ... -
javase_20(Awt初步认识)
2012-08-27 01:00 1029多线程的再度复习.class package com.jav ... -
javase_19(多线程)
2012-08-24 23:32 876进程: 进程是具有一定独立功能的程序关于某个数据集合上的一次 ... -
javase_18(回顾与反射机制学习)
2012-08-20 11:58 462AM上午总结: package com.ja ... -
javase_17(IO的总结)
2012-08-20 11:55 1070所有的流在使用完毕时,都需要调用close方法进行关流,释放资 ... -
javase_16(其它流)
2012-08-20 11:52 912IO包中的其他流: 1.打印流 a)PrintWri ... -
javase_16(其它流)
2012-08-20 11:38 0IO包中的其他流: 1.打印流 a)PrintWri ... -
javase_15(File类的应用)
2012-08-19 00:07 902File类:用来将文件或者 ... -
javase_14(字节流)
2012-08-19 00:00 726字节流的抽象基类: InputStream(输入) ... -
javase_12(集合+时间对象)
2012-08-19 00:00 584Map集合 1.Map存储了一系列键值的映射关系2.M ... -
javase_11(集合的理解)
2012-08-19 00:00 889集合类: 为什么使 ... -
javase_10(String类日常操作)
2012-08-18 09:40 842第一: package com.ja ... -
javase_09(面向对象总结)
2012-08-18 09:39 917Java的环境配置 day01 1. 环 ... -
javase_08(基础面试题)
2012-08-18 09:38 765面试题:请说说抽象类和接口的区别 抽象类,使用abstrac ... -
javase_07(继承与设计模式)
2012-08-18 09:36 646/* 子类对象的实 ... -
javase_06(面向对象)
2012-08-18 09:29 704/* 内部类: .在类中定义的类我们称之为内部类, ... -
javase_05(面向对象)
2012-08-16 11:25 0一.构造函数的定义与 ... -
javase_05(面向对象)
2012-08-16 11:22 829一.构造函数的定义与作用 1.函数的名次与类同名2.没有 ... -
javase_04(面向对象)
2012-08-16 11:21 559面向对象:一种编程思想,使用对象来描述生活中的事物:面向对象的 ...
相关推荐
IO流(Input/Output Stream)是Java处理输入输出的关键机制,分为字符流和字节流,覆盖了读写文件、网络通信等多种场景。BufferedReader、FileWriter、InputStreamReader、OutputStream等类是常用的IO类。深入理解流...
- **I/O流**:输入/输出流的概念,字符流(Reader和Writer)的使用。 7. **集合框架**: - **List、Set和Queue接口**:ArrayList、LinkedList、HashSet、TreeSet等实现类的特性与使用。 - **Map接口**:HashMap...
1. **Java IO体系结构**:Java IO框架主要包括字节流和字符流,分为输入流和输出流。字节流处理单个字节的数据,如InputStream和OutputStream家族;字符流处理Unicode字符,如Reader和Writer家族。此外,还有缓冲流...
- **转换流**:InputStreamReader和OutputStreamWriter将字节流转换为字符流,支持不同字符编码。 - **序列化流**:ObjectInputStream和ObjectOutputStream允许我们将对象的状态保存到文件或网络,实现对象的持久...
- **字符串处理**:String类的常用方法,如concat、substring、indexOf等,以及StringBuilder和StringBuffer的使用。 2. **JavaSE基础知识总结之二**: - **集合框架**:ArrayList、LinkedList、HashSet、HashMap...
7. **IO流**:Java的IO流处理包括输入流和输出流,支持处理文件、网络数据和系统资源。NIO(New IO)在Java 1.4中引入,提供了更高效的数据传输和非阻塞I/O操作。 8. **多线程**:Java内置对多线程的支持,通过实现...
Java IO体系主要包括两个方面:字节流和字符流。字节流主要由`InputStream`和`OutputStream`构成;而字符流则由`Reader`和`Writer`构成。这些基础类构成了整个IO系统的核心,其他流类均继承自这些基本类。 #### ...
包括字节流、字符流、对象流以及缓冲流等。 6. **多线程**:Java提供Thread类和Runnable接口来支持并发编程。通过线程池、同步机制(synchronized关键字、Lock接口)以及并发工具类(如ExecutorService、...
`\d`代表数字,`\D`代表非数字,`\s`代表空白字符,`\S`代表非空白字符,`\w`代表单词字符,`\W`代表非单词字符。正则表达式还可以使用`|`表示选择其中之一,`()`用于分组。 在Java中,`String`类提供了对正则...
8. **集合框架增强**:对`Collections`和`Arrays`类进行了优化,添加了新的方法,如`copyOf()`、`stream()`等,以支持流(Stream)操作。 9. **异常链**:当一个异常在处理另一个异常时被抛出,可以形成异常链,...
3. **I/O流**:JavaSE6_API的`java.io`包包含了输入输出流的处理,包括字符流和字节流,如`FileInputStream`、`FileOutputStream`、`BufferedReader`、`PrintWriter`等。此外,NIO(New IO)在Java 6中引入,提供了...
- **IO流**:用于读写文件、网络通信等,包括字节流和字符流。 - **线程**:Java支持多线程编程,可以同时执行多个任务,通过Thread类和Runnable接口实现。 - **反射**:运行时动态获取类的信息并创建对象的能力,...
分为字节流和字符流,以及输入流和输出流。还有缓冲流、对象流、文件流等,用于不同类型的I/O操作。 10. **多线程**:Java提供了内置的多线程支持,通过Thread类和Runnable接口可以创建并运行线程。线程同步和互斥...
Java 6加强了对国际字符集的支持,提供了java.text和java.util.Locale等类来处理不同语言和地区的文本及格式。 四、XML处理 Java SE 6.0改进了XML处理能力,包括DOM、SAX和StAX解析器,以及JAXB(Java Architecture...
字节流和字符流的主要区别在于处理数据的单位,字节流每次处理一个字节,而字符流处理一个字符(两个字节)。Java中,所有的流都继承自`java.io`包下的抽象类,而不是接口。字节流的主要类有`InputStream`(字节输入...
`day24_04`和`day24_02`分别介绍了转换流`CharacterOutputStream`和`InputStream`,这两个流是字节流和字符流之间的桥梁,允许在字节流和字符流之间进行转换,适应不同的数据格式。 最后,`day24_15`视频展示了如何...
I/O流允许程序进行输入输出操作,支持字符流和字节流,以及缓冲区、转换流等高级功能。网络编程方面,Java提供了Socket和ServerSocket类,用于实现客户端和服务器之间的通信。 多线程是Java的一大亮点,Thread类和...