锁定老帖子 主题:[转]JAVA IO流
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-27
Input和Output 1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型: 1.1 以字节为导向的stream 1.2 以Unicode字符为导向的stream 以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,只是在操作时的导向不同。如CharArrayReader:和 ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是后者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。 1.3 两种不现导向的stream之间的转换
2.1 “为stream添加属性”的作用 运用上面介绍的Java中操作IO的API,我们就可完成我们想完成的任何操作了。但通过FilterInputStream和FilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。 如果我们要往一个文件中写入数据,我们可以这样操作: 2.2 FilterInputStream的各种类型 2.2.1 用于封装以字节为导向的InputStream 2.2.2 用于封装以字符为导向的InputStream 2.3 FilterOutStream的各种类型 2.3.1 用于封装以字节为导向的OutputStream 2.3.2 用于封装以字符为导向的OutputStream 3. RandomAccessFile 1) 可通过RandomAccessFile对象完成对文件的读写操作 4. I/O应用的一个例子 import java.io.*; public class TestIO{ public static void main(String[] args) throws IOException{ //1.以行为单位从一个文件读取数据 BufferedReader in =new BufferedReader(new FileReader(\"F: epalonTestIO.java\")); String s, s2 = new String(); while((s = in.readLine()) != null) s2 += s + "\\"; in.close(); //1b. 接收键盘的输入 BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in)); System.out.println(\"Enter a line:\"); System.out.println(stdin.readLine()); //2. 从一个String对象中读取数据 StringReader in2 = new StringReader(s2); int c; while((c = in2.read()) != -1) System.out.println((char)c); in2.close(); //3. 从内存取出格式化输入 try{ DataInputStream in3 =new DataInputStream(new ByteArrayInputStream(s2.getBytes())); while(true) System.out.println((char)in3.readByte()); } catch(EOFException e){ System.out.println(\"End of stream\"); } //4. 输出到文件 try{ BufferedReader in4 =new BufferedReader(new StringReader(s2)); //把s2当作输入对象 PrintWriter out1 =new PrintWriter(new BufferedWriter(new FileWriter(\"F:epalon TestIO.out\"))); int lineCount = 1; while((s = in4.readLine()) != null) out1.println(lineCount + \":\" + s); out1.close(); in4.close(); } catch(EOFException ex){ System.out.println(\"End of stream\"); } //5. 数据的存储和恢复 try{ DataOutputStream out2 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(\"F:epalon Data.txt\"))); out2.writeDouble(3.1415926); out2.writeChars(" Thas was pi:writeChars "); out2.writeBytes( "Thas was pi:writeByte "); out2.close(); DataInputStream in5 = new DataInputStream(new BufferedInputStream(new FileInputStream(\"F:epalon Data.txt\"))); BufferedReader in5br = new BufferedReader(new InputStreamReader(in5)); System.out.println(in5.readDouble()); System.out.println(in5br.readLine()); System.out.println(in5br.readLine()); } catch(EOFException e){ System.out.println(\"End of stream\"); } //6. 通过RandomAccessFile操作文件 RandomAccessFile rf = new RandomAccessFile(\"F:epalon rtest.dat\", \"rw\"); for(int i=0; i<10; i++) rf.writeDouble(i*1.414); rf.close(); rf = new RandomAccessFile(\"F:epalon rtest.dat\", \"r\"); for(int i=0; i<10; i++) System.out.println(\"Value \" + i + \":\" + rf.readDouble()); rf.close(); rf = new RandomAccessFile(\"F:epalon rtest.dat\", \"rw\"); rf.seek(5*8); rf.writeDouble(47.0001); rf.close(); rf = new RandomAccessFile(\"F:epalon rtest.dat\", \"r\"); for(int i=0; i<10; i++) System.out.println(\"Value \" + i + \":\" + rf.readDouble()); rf.close(); } }
关于代码的解释(以区为单位):
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-01
谢谢楼主的分享!其实当你发现JAVA的IO是采用decorator模式之后,其结构立马变得清晰起来。
|
|
返回顶楼 | |
浏览 8464 次