仓酷云

标题: JAVA教程之完全分明Java的IO体系 [打印本页]

作者: 乐观    时间: 2015-1-18 11:48
标题: JAVA教程之完全分明Java的IO体系
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
转自--豆豆手艺收集(http://www.ddvip.net/program/java/index1/61.htm)

一.Input和Output1.stream代表的是任何有才能产出数据的数据源,或是任何有才能吸收数据的吸收源。在Java的IO中,一切的stream(包含Input和Outstream)都包含两品种型:1.1以字节为导向的stream以字节为导向的stream,暗示以字节为单元从stream中读取或往stream中写进信息。以字节为导向的stream包含上面几品种型:1)input stream:1)ByteArrayInputStream:把内存中的一个缓冲区作为InputStream利用2)StringBufferInputStream:把一个String对象作为InputStream3)FileInputStream:把一个文件作为InputStream,完成对文件的读取操纵4)PipedInputStream:完成了pipe的观点,次要在线程中利用5)SequenceInputStream:把多个InputStream兼并为一个InputStream2)Out stream1)ByteArrayOutputStream:把信息存进内存中的一个缓冲区中2)FileOutputStream:把信息存进文件中3)PipedOutputStream:完成了pipe的观点,次要在线程中利用4)SequenceOutputStream:把多个OutStream兼并为一个OutStream1.2以Unicode字符为导向的stream以Unicode字符为导向的stream,暗示以Unicode字符为单元从stream中读取或往stream中写进信息。以Unicode字符为导向的stream包含上面几品种型:1)Input Stream1)CharArrayReader:与ByteArrayInputStream对应2)StringReader:与StringBufferInputStream对应3)FileReader:与FileInputStream对应4)PipedReader:与PipedInputStream对应2)Out Stream1)CharArrayWrite:与ByteArrayOutputStream对应2)StringWrite:无与之对应的以字节为导向的stream3)FileWrite:与FileOutputStream对应4)PipedWrite:与PipedOutputStream对应


以字符为导向的stream基础上对有与之绝对应的以字节为导向的stream。两个对应类完成的功效不异,字是在操纵时的导向分歧。如CharArrayReader:和ByteArrayInputStream的感化都是把内存中的一个缓冲区作为InputStream利用,所分歧的是前者每次从内存中读取一个字节的信息,尔后者每次从内存中读取一个字符。1.3两种不现导向的stream之间的转换InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。2.stream增加属性2.1“为stream增加属性”的感化使用下面先容的Java中操纵IO的API,我们便可完成我们想完成的任何操纵了。但经由过程FilterInputStream和FilterOutStream的子类,我们能够为stream增加属性。上面以一个例子来讲明这类功效的感化。假如我们要往一个文件中写进数据,我们能够如许操纵:FileOutStreamfs=newFileOutStream(“test.txt”);然后就能够经由过程发生的fs对象挪用write()函数交往test.txt文件中写进数据了。可是,假如我们想完成“先把要写进文件的数据先缓存到内存中,再把缓存中的数据写进文件中”的功效时,下面的API就没有一个能满意我们的需求了。可是经由过程FilterInputStream和FilterOutStream的子类,为FileOutStream增加我们所必要的功效。2.2FilterInputStream的各类范例2.2.1用于封装以字节为导向的InputStream1)DataInputStream:从stream中读取基础范例(int、char等)数据。2)BufferedInputStream:利用缓冲区3)LineNumberInputStream:会纪录inputstream内的行数,然后能够挪用getLineNumber()和setLineNumber(int)4)PushbackInputStream:很罕用到,一样平常用于编译器开辟2.2.2用于封装以字符为导向的InputStream1)没有与DataInputStream对应的类。除非在要利用readLine()时改用BufferedReader,不然利用DataInputStream2)BufferedReader:与BufferedInputStream对应3)LineNumberReader:与LineNumberInputStream对应4)PushBackReader:与PushbackInputStream对应2.3FilterOutStream的各类范例2.2.3用于封装以字节为导向的OutputStream1)DataIOutStream:往stream中输入基础范例(int、char等)数据。2)BufferedOutStream:利用缓冲区3)PrintStream:发生格局化输入2.2.4用于封装以字符为导向的OutputStream1)BufferedWrite:与对应2)PrintWrite:与对应3.RandomAccessFile1)可经由过程RandomAccessFile对象完成对文件的读写操纵2)在发生一个对象时,可指明要翻开的文件的性子:r,只读;w,只写;rw可读写3)能够间接跳到文件中指定的地位4.I/O使用的一个例子importjava.io.*;publicclassTestIO{publicstaticvoidmain(String[]args)throwsIOException{//1.以举动单元从一个文件读取数据BufferedReaderin=newBufferedReader(newFileReader("F:
epalonTestIO.java"));Strings,s2=newString();while((s=in.readLine())!=null)s2+=s+"
";in.close();
//1b.吸收键盘的输出BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));System.out.println("Enteraline:");System.out.println(stdin.readLine());

//2.从一个String对象中读取数据StringReaderin2=newStringReader(s2);intc;while((c=in2.read())!=-1)System.out.println((char)c);in2.close();

//3.从内存掏出格局化输出try{DataInputStreamin3=newDataInputStream(newByteArrayInputStream(s2.getBytes()));while(true)System.out.println((char)in3.readByte());}catch(EOFExceptione){System.out.println("Endofstream");}

//4.输入到文件try{BufferedReaderin4=newBufferedReader(newStringReader(s2));PrintWriterout1=newPrintWriter(newBufferedWriter(newFileWriter("F:
epalonTestIO.out")));intlineCount=1;while((s=in4.readLine())!=null)out1.println(lineCount+++":"+s);out1.close();in4.close();}atch(EOFExceptionex){System.out.println("Endofstream");}

//5.数据的存储和恢复try{DataOutputStreamout2=newDataOutputStream(newBufferedOutputStream(newFileOutputStream("F:
epalonData.txt")));out2.writeDouble(3.1415926);out2.writeChars("
Thaswaspi:writeChars
");out2.writeBytes("Thaswaspi:writeByte
");out2.close();DataInputStreamin5=newDataInputStream(newBufferedInputStream(newFileInputStream("F:
epalonData.txt")));BufferedReaderin5br=newBufferedReader(newInputStreamReader(in5));System.out.println(in5.readDouble());System.out.println(in5br.readLine());System.out.println(in5br.readLine());}catch(EOFExceptione){System.out.println("Endofstream");}

//6.经由过程RandomAccessFile操纵文件RandomAccessFilerf=newRandomAccessFile("F:
epalon
test.dat","rw");for(inti=0;i<10;i++)rf.writeDouble(i*1.414);rf.close();

rf=newRandomAccessFile("F:
epalon
test.dat","r");for(inti=0;i<10;i++)System.out.println("Value"+i+":"+rf.readDouble());rf.close();

rf=newRandomAccessFile("F:
epalon
test.dat","rw");rf.seek(5*8);rf.writeDouble(47.0001);rf.close();

rf=newRandomAccessFile("F:
epalon
test.dat","r");for(inti=0;i<10;i++)System.out.println("Value"+i+":"+rf.readDouble());rf.close();}}关于代码的注释(以区为单元):1区中,当读取文件时,先把文件内容读到缓存中,当挪用in.readLine()时,再从缓存中以字符的体例读取数据(以下简称“缓存字节读取体例”)。1b区中,因为想以缓存字节读取体例从尺度IO(键盘)中读取数据,以是要先把尺度IO(System.in)转换成字符导向的stream,再举行BufferedReader封装。2区中,要以字符的情势从一个String对象中读取数据,以是要发生一个StringReader范例的stream。4区中,对String对象s2读取数据时,先把对象中的数据存进缓存中,再从缓冲中举行读取;对TestIO.out文件举行操纵时,先把格局化后的信息输入到缓存中,再把缓存中的信息输入到文件中。5区中,对Data.txt文件举行输入时,是先把基础范例的数据输入屋缓存中,再把缓存中的数据输入到文件中;对文件举行读取操纵时,先把文件中的数据读取到缓存中,再从缓存中以基础范例的情势举行读取。注重in5.readDouble()这一行。由于写进第一个writeDouble(),以是为了准确显现。也要以基础范例的情势举行读取。6区是经由过程RandomAccessFile类对文件举行操纵

Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点
作者: 小妖女    时间: 2015-1-21 15:22
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 不帅    时间: 2015-1-30 20:25
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 若天明    时间: 2015-2-2 21:42
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 因胸联盟    时间: 2015-2-5 11:43
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者: 再见西城    时间: 2015-2-11 14:51
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 老尸    时间: 2015-2-26 22:18
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 变相怪杰    时间: 2015-3-8 18:16
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 透明    时间: 2015-3-15 02:11
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 乐观    时间: 2015-4-5 11:51
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 再现理想    时间: 2015-4-5 14:55
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 第二个灵魂    时间: 2015-4-6 09:33
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者: 灵魂腐蚀    时间: 2015-4-13 01:32
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
作者: 小女巫    时间: 2015-4-15 03:02
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者: admin    时间: 2015-4-16 22:10
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 仓酷云    时间: 2015-4-17 04:22
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
作者: 飘灵儿    时间: 2015-4-18 16:40
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 简单生活    时间: 2015-4-26 11:26
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者: 分手快乐    时间: 2015-5-4 05:11
是一种使网页(Web Page)产生生动活泼画面的语言




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2