《输入输出学习.pptx》由会员分享,可在线阅读,更多相关《输入输出学习.pptx(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1流Stream的概念是从源到目的的字节的有序序列,先进先出。两种基本流:Input stream(输入流),Output stream(输出流)第1页/共37页2流操作的过程Reading:open a streamwhile more information read informationclose the stream Writing:open a streamwhile more information write informationclose the stream第2页/共37页3两种结构的流 Node Stream(节点流):从特定源如磁盘文件或内存某区域进行读或写入,它是一
2、种最基本的流。Filter Stream(过滤流):使用其它已存在的流作为输入源或输出目的地。它要对与其相连的另一个流进行某种转换。l l e HoNode InputStreamFilter InputStreamread()第3页/共37页4两种流类的体系 Java.io包中包含了流式I/O所需要的所有类。流式I/O类根据操作的数据类型(16位字符或字节)分成两个层次体系(字节流和字符流)。字节流:流中的数据以字节流:流中的数据以8位字节为单位进行读写,以位字节为单位进行读写,以InputStream与与OutputStream为基础类。为基础类。字符流:流中的数据以字符流:流中的数据以1
3、6位字节为单位进行读写,以位字节为单位进行读写,以Reader与与Writer为基础类。为基础类。Java中的流常指的是字节流。中的流常指的是字节流。第4页/共37页5两种流类的体系InputStream和OutputStream是字节流的两个顶层父类。它们提供了输入流类和输出流类的能用API。第5页/共37页6字节流输入流类层次带阴影的类是节点流,其它类是过滤流第6页/共37页7InputStream 方法三个基本read()方法int read()/读一个字节返回int read(byte )/将数据读入byte,返回读的字节数int read(byte,int offset,int le
4、ngth)/将读入的数据放入一个字节数组中,并返回所读字节数。两个整形参数表示所读入数据在数组b中的存放位置。其它方法void close()/关闭流。自顶向下关闭Filter streamint available()/返回未读的字节数long skip(long n)/跳过n个字节流的回读方法 boolean markSupported()/测试打开的流是否支持书签void mark(int readlimt)/标记当前流,并建立readlimt大 小的缓冲区void reset()/返回到标签出 第7页/共37页8字节流输出流类层次带阴影的类是节点流,其它类是过滤流第8页/共37页9Ou
5、tputStream方法三个基本的write()方法void write(int)/写一个字节void write(byte)/写一个字节数组void write(byte,int offset,int length)其它方法void close()void flush()/强行写一般在调用close()方法关闭流前,可以先调用flush()方法第9页/共37页10字符流 Reader和Writer是字符流的两个顶层抽象超类。Reader和Writer 类实现字节和字符间的自动转换。每一个核心输入、输出流,都有相应的Reader和Writer版本。第10页/共37页11Reader的类层次带阴
6、影的类是节点流,其它类是过滤流第11页/共37页12Reader的基本方法int read()int read();/读单个字符int read(char cbuf)int read(char cbuf);/读字符放入数组中int read(char cbuf,int offset,int length)int read(char cbuf,int offset,int length);/读字符放入数组的指定位置 void close()/关闭流。long skip(long n)/跳过n个字符boolean markSupported()/测试打开的流是否支持书签void mark(int)
7、/标记当前流,并建立int大小缓冲区void reset()/返回标签出 boolean ready()/测试当前流是否准备好进行读第12页/共37页13Writer的类层次带阴影的类是节点流,其它类是过滤流第13页/共37页14Writer的基本方法int write(int c);/int write(int c);/写单个字符int write(char cbuf);/int write(char cbuf);/写字符数组int write(char cbuf,int offset,int length);int write(char cbuf,int offset,int length
8、);int write(String str);int write(String str);int write(String str,int offset,int length);int write(String str,int offset,int length);void close()/关闭流void flush()/强行写第14页/共37页15字节流与字符流的比较 Reader Reader 和 InputStreamInputStream以及Writer Writer 与 OutputStream定义的API类似,但操作的数据类型不同。所有的流InputStreamInputStre
9、am、OutputStream 、ReaderReader、Writer Writer 在创建时自动打开;程序中可以调用closeclose方法关闭流,否则JavaJava运行环境的垃圾收集器将隐含将流关闭。第15页/共37页16JavaJava节点流节点流 I/OStreamsI/OStreams Type of I/OType of I/OType of I/OType of I/O流类名称流类名称流类名称流类名称StreamsStreamsStreamsStreams描述描述描述描述DescriptionDescriptionDescriptionDescriptionMemoryMem
10、ory CharArrayReaderCharArrayReaderCharArrayReaderCharArrayReaderCharArrayWriterCharArrayWriterCharArrayWriterCharArrayWriterByteArrayInputStreamByteArrayInputStreamByteArrayInputStreamByteArrayInputStreamByteArrayOutputStreamByteArrayOutputStreamByteArrayOutputStreamByteArrayOutputStream 从从从从/向内存数组读
11、写数据向内存数组读写数据向内存数组读写数据向内存数组读写数据.StringReaderStringReaderStringReaderStringReaderStringWriterStringWriterStringWriterStringWriterStringBufferInputStreamStringBufferInputStreamStringBufferInputStreamStringBufferInputStream 从从从从/向内存字符串读写数据向内存字符串读写数据向内存字符串读写数据向内存字符串读写数据 PipePipe PipedReaderPipedReaderPip
12、edReaderPipedReaderPipedWriterPipedWriterPipedWriterPipedWriterPipedInputStreamPipedInputStreamPipedInputStreamPipedInputStreamPipedOutputStreamPipedOutputStreamPipedOutputStreamPipedOutputStream 实现管道的输入和输出实现管道的输入和输出实现管道的输入和输出实现管道的输入和输出 FileFile FileReaderFileReaderFileReaderFileReaderFileWriterFile
13、WriterFileWriterFileWriterFileInputStreamFileInputStreamFileInputStreamFileInputStreamFileOutputStreamFileOutputStreamFileOutputStreamFileOutputStream 统称为文件流。对文件进行统称为文件流。对文件进行统称为文件流。对文件进行统称为文件流。对文件进行读、写操作读、写操作读、写操作读、写操作 第16页/共37页17JavaJava过滤流过滤流 I/OStreamsI/OStreams Type of I/OType of I/OType of I/O
14、Type of I/OStreamsStreamsStreamsStreamsDescriptionDescriptionDescriptionDescriptionObjectObjectSerializationSerialization对象对象I/OI/O ObjectInputStreamObjectInputStreamObjectInputStreamObjectInputStreamObjectOutputStreamObjectOutputStreamObjectOutputStreamObjectOutputStream 对象的输入、输出对象的输入、输出对象的输入、输出对象的
15、输入、输出 DataDataConversionConversion数据转换数据转换DataInputStreamDataInputStreamDataInputStreamDataInputStreamDataOutputStreamDataOutputStreamDataOutputStreamDataOutputStream 读、写基本数据类型读、写基本数据类型读、写基本数据类型读、写基本数据类型 PrintingPrinting打印流打印流 PrintWriterPrintWriterPrintWriterPrintWriterPrintStreamPrintStreamPrintSt
16、reamPrintStream 包含方便的打印方法包含方便的打印方法包含方便的打印方法包含方便的打印方法 BufferingBuffering 缓存缓存I/OI/O BufferedReaderBufferedReaderBufferedReaderBufferedReaderBufferedWriterBufferedWriterBufferedWriterBufferedWriterBufferedInputStreamBufferedInputStreamBufferedInputStreamBufferedInputStreamBufferedOutputStreamBufferedO
17、utputStreamBufferedOutputStreamBufferedOutputStream 在读入或写出时,对数据进在读入或写出时,对数据进在读入或写出时,对数据进在读入或写出时,对数据进行缓存,以减少行缓存,以减少行缓存,以减少行缓存,以减少I/OI/O的次数。的次数。的次数。的次数。第17页/共37页18I/OStreamsI/OStreams Type of I/OType of I/OType of I/OType of I/OStreamsStreamsStreamsStreamsDescriptionDescriptionDescriptionDescriptionFi
18、lteringFiltering流过滤流过滤流过滤流过滤 FilterReaderFilterReaderFilterReaderFilterReaderFilterWriterFilterWriterFilterWriterFilterWriterFilterInputStreamFilterInputStreamFilterInputStreamFilterInputStreamFilterOutputStreamFilterOutputStreamFilterOutputStreamFilterOutputStream 过滤流过滤流过滤流过滤流,在数据进行读或写时,在数据进行读或写时,在
19、数据进行读或写时,在数据进行读或写时进行过滤。进行过滤。进行过滤。进行过滤。ConcatenationConcatenation 流连接流连接流连接流连接SequenceInputStreamSequenceInputStreamSequenceInputStreamSequenceInputStream 把多个输入流连接成一个输入把多个输入流连接成一个输入把多个输入流连接成一个输入把多个输入流连接成一个输入流流流流 CountingCounting 流数据计数流数据计数流数据计数流数据计数LineNumberReaderLineNumberReaderLineNumberReaderLine
20、NumberReaderLineNumberInputStreamLineNumberInputStreamLineNumberInputStreamLineNumberInputStream 在读入数据时对行记数在读入数据时对行记数在读入数据时对行记数在读入数据时对行记数 PeekingAheadPeekingAhead 流预读流预读流预读流预读PushbackReaderPushbackReaderPushbackReaderPushbackReaderPushbackInputStreamPushbackInputStreamPushbackInputStreamPushbackInpu
21、tStream 通过缓存机制,进行预读通过缓存机制,进行预读通过缓存机制,进行预读通过缓存机制,进行预读 ConvertingConvertingbetweenBytesbetweenBytesandCharactersandCharacters字节与字符转换字节与字符转换字节与字符转换字节与字符转换 InputStreamReaderInputStreamReaderInputStreamReaderInputStreamReaderOutputStreamWriterOutputStreamWriterOutputStreamWriterOutputStreamWriter 按照一定的编码
22、按照一定的编码按照一定的编码按照一定的编码/解码标准将字解码标准将字解码标准将字解码标准将字节流转换为字符流节流转换为字符流节流转换为字符流节流转换为字符流第18页/共37页19文件流文件流类包括:FileReader,FileWriter,FileInputStream,FileOutputStream创建文件流:常用文件名或File类的对象创建文件流。例:通过文件字节流实现文件复制 CopyBytes.java,利用FileInputStream,FileOutputStream。通过文件字符流实现文件复制 Copy.java,利用FileReader,FileWriter,将farrag
23、o.txt的内容拷贝到outagain.txt中。第19页/共37页20管道流管道用来把一个线程的输出连接到另一个线程的输入。PipedReader/PipedInputStream实现管道的输入端;PipedWriter/PipedOutputStream实现管道的输出端。管道流模型:管道输入管道输出管道输入线程1连接线程2线程3连接管道输出第20页/共37页21将一个线程的输出流直接挂在另一个线程的输入流,建立管道,实现线程间数据交换。PipedInputStream pin=new PipedInputStream();PipedOutputStream pout=new PipedOu
24、tputStream(pin);或:PipedInputStream pin=new PipedInputStream();PipedOutputStream pout=new PipedOutputStream();pin.connect(pout);或pout.connect(pin)。管道流的创建第21页/共37页22管道流示例Rhymingwords.java,输入一组单词,先将每个单词逆序,再将所有单词排序,最后将这些单词逆序输出。程序处理流程:第22页/共37页23示例中的管道流例73第23页/共37页24是过滤流。数据从原始流成块读入或将数据积累到一个大数据块后再成批输出。基本方
25、法:int read()int read(byte,int offset,int length)int write(int c)int write(int c)void write(byte,int offset,int length)BufferedReader增加readLine()方法。BufferedInputStream/BufferedOutputStream第24页/共37页25 DataInputStream和DataOutputStream(Filter stream)读写基本数据类型:DataInputStream方法 byte readByte()boolean read
26、Boolean()long readLong()char readChar()double readDouble()float readFloat()short readShort()int readInt()DataOutputStream 方法 void writeByte(byte)void writeBoolean(boolean)void writeLong(long)void writeChar(char)void writeDouble(double)void writeFloat(float)void writeShort(short)void writeInt(int)voi
27、d writeBytes(String)void writeChars(String)DataInputStream/DataOutputStream数据流第25页/共37页26示例/example of using inputData&outputData/example of using inputData&outputData/DataIOTeat.java/DataIOTeat.javaimport java.io.*;import java.io.*;public class DataIOTest public class DataIOTest public static void
28、main(String public static void main(String args)args)throws IOExceptionthrows IOException /write the data out /write the data out DataOutputStream out=new DataOutputStream(DataOutputStream out=new DataOutputStream(new FileOutputStream(invoice1.txt);new FileOutputStream(invoice1.txt);double prices=19
29、.99,9.99,15.99,3.99,4.99;double prices=19.99,9.99,15.99,3.99,4.99;int units=12,8,13,29,50;int units=12,8,13,29,50;String descs=Java T-shirt,String descs=Java T-shirt,Java Mug,Java Mug,Duke Juggling Dolls,Duke Juggling Dolls,Java Pin,Java Pin,Java Key Chain;Java Key Chain;第26页/共37页27 for(int i=0;i pr
30、ices.length;i+)for(int i=0;i prices.length;i+)out.writeDouble(pricesi);out.writeDouble(pricesi);out.writeChar(t);out.writeChar(t);out.writeInt(unitsi);out.writeInt(unitsi);out.writeChar(t);out.writeChar(t);out.writeChars(descsi);out.writeChars(descsi);out.writeChar(n);out.writeChar(n);out.close();ou
31、t.close();/read it in again /read it in again DataInputStream in=new DataInputStream(new DataInputStream in=new DataInputStream(new FileInputStream(invoice1.txt);FileInputStream(invoice1.txt);double price;double price;int unit;int unit;String desc;String desc;double total=0.0;double total=0.0;第27页/共
32、37页28try try while(true)while(true)price=in.readDouble();price=in.readDouble();in.readChar();/throws out the tab in.readChar();/throws out the tab unit=in.readInt();unit=in.readInt();in.readChar();/throws out the tab in.readChar();/throws out the tab desc=in.readLine();desc=in.readLine();System.out.
33、println(Youve ordered +System.out.println(Youve ordered +unit+units of +unit+units of +desc+at$+price);desc+at$+price);total=total+unit*price;total=total+unit*price;catch(EOFException e)catch(EOFException e)System.out.println(For a TOTAL of:$+total);System.out.println(For a TOTAL of:$+total);in.clos
34、e();in.close();Youve ordered 12 units of Java T-shirt at$19.99Youve ordered 8 units of Java Mug at$9.99Youve ordered 13 units of Duke Juggling Dolls at$15.99Youve ordered 29 units of Java Pin at$3.99Youve ordered 50 units of Java Key Chain at$4.99For a TOTAL of:$892.88第28页/共37页29标准输入输出uSystem.in pub
35、lic static final InputStream inuSystem.out public static final PrintStream out System.err public static final PrintStream err示例7-5第29页/共37页30文件 Java.io.File 文件类提供获取文件基本信息,以及其它与文件相关的操作。创建新的文件对象:File myFile;myFile=new File(“mymotd”);myFile=new File(“”,”mymotd”);第30页/共37页31文件测试与实用方法文件名String getName()S
36、tring getPath()String getAbsolutePath()String getParent()boolean renameTo(File newName)文件测试boolean exists()boolean canWrite()boolean canRead()boolean isFile()boolean isDirectory()boolean isAbsolute()第31页/共37页32随机存取文件例:从zip文件中读取特定文件第32页/共37页33随机存取文件类-RandomAccessFile创建随机存取文件:myRAFile=new RandomAccess
37、File(String name,String mode);myRAFile=new RandomAccessFile(File file,String mode);常用的方法:数据读写方法;long getFilePointer();/返回当前文件指针void seek(long pos);/文件指针定位到指定位置long length();/返回文件长度“r”,”w”,”rw”第33页/共37页34对象输入/输出流把对象保存到外存,称为永久化。实现java.io.Serializable接口类的对象可以被输入/输出。只有对象的数据被保存,方法与构造函数不被保存。以transient关键字标
38、记的数据不被保存。public class MyClass implements Serializable public transient Thread myThread;Private transient String customerID;private int total;第34页/共37页35输出对象public class SerializeDate SerializeDate()Date d=new Date();try FileOutputStream f=new FileOutputStream(“date.ser”);ObjectOutputStream s=new Obj
39、ectOutputStream(f);s.writeObject(d);f.close();catch(IOException e)e.printStackTrace();public static void main(String args)SerializeDate b=new SerializeDate();在java.util中,实现了Serialization接口第35页/共37页36输入对象public class UnSerializeDate UnSerializeDate()Date d=null;try FileInputStream f=new FileInputStream(“date.ser”);ObjectInputStream s=new ObjectInputStream(f);d=(Date)s.readObject();f.close();catch(Exception e)e.printStackTrace();public static void main(String args)UnSerializeDate a=new UnSerializeDate();第36页/共37页37感谢您的观看!第37页/共37页
限制150内