|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
转自--豆豆手艺收集(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#程序员都明白一点 |
|