黑马程序员--IO输入与输出

android培训、java培训、期待与您交流! ----------------------
File

1:定义了一些与平台无关的方法来操纵文件例如:创建文件,删除文件和重命名文件

 

Java中的目录被当作一种特殊的文件使用,list方法可以返回目录的素偶有字目录和文件名。

例子:

判断某个文件是否存在,存在删除,不存在则创建

RandomAccessFile类类提供了众多的文件访问方法

RandomAccessFile“类支持随机访问“方式

多线程下载也是用这个类,第一个用户下载1-2k,第二3-4k

最后客户端把这些所下载的内容组合成为一个客户端程序

RandomAccessFile“类在随机(相对而言)读写等长记录格式的文件时有很大的优势    

 RandomAccessFile 类仅限与操作文件,不能访问其他的IO设备,如网络,内存映像等

两种构造方法:

New RandomAccessFile(f,”rw”)//读写方式

New RandomAccessFiel(f,”r”)//只读方式

编程实例:

往文件中写入三个员工的信息,每个员工含有姓名和年龄两个字段,然后按照第二,第一,第三的先后顺序读出于员工的信息。

构造函数是没有返回类型的。 

 

 理解流的概念:

1流是字节序列的抽象概念。

2文件是有数的静态存储形式,而流是指数据传输时的形态。

(看不到数据流写入的形态,但是可以取到)

3:流分为两大类:节点流和过滤流(处理流类)

InputStream 程序可以从中连续读取字节的对象叫输入流,在java中。用

Inputstream 类中描述所有输入流的抽象概念。

inputStream类的方法:

int read()

(如果碰到流的截出处返回的值是-1,如果碰到的是没有截出,又没有数据可读、

那么int read()即将阻塞,运行程序。,指导流中有新的数据可读)

二进制形式为11111111的数据,以byte类型表示为-1,以int类型表示为255

 

 

 int

read(byte[] b)
          将最多 b.length 个数据字节从此文件读入 byte 数组。

将最多b.length个数据字节从此文件读入 byte数组。在至少一个输入字节可用前,此方法一直阻塞

 

Int  read(byte[] b, int off, int len)

将最多len个数据字节从此文件读入 byte数组。

Long skip long n

Int available ()

Void mark (int readlimit)(用于包装类的方法)

 Void reset()(mark配合使用)

Boolean markSupported ()

返回当前的流对象是否支持 mark  reset操作

void close()

 

OutputStream

 

程序可以向其中连续写入字节的独享叫输出流,在java中,用OutputStream类来描述所有的输出流的抽象概念。

OutputStream类的方法:

void write(int b ) write方法调用可以直接使用表达式,不用强制转换

void writebyte[] b b中所有的字节内容都写到输出流内容中

void write (byte [] b,int off,  int len )

void flush() 用于将内存反冲驱动的内容测底的清空,并且输出到io设备中

void close()

 

网络服务随机出现问题的概率比较多,执行的过程,

 

005  FileInputStreamFileOutputStream

FileInputStream FileOutputStream分别用来创建磁盘文件的输入流和输出流对象,通过他们的构造函数来指定文件路径和文件名

创建FileInputStream实例对象时,如果指定的文件已经存在,这个文件中的原来内容将被覆盖清除。

对于一个磁盘文件创建FileInputStream对象的两种方式:

1FileInputStream inOne = new FileInputStream”hello.test”;//文件的路径名直接传递

2: File f =  new  File(“hellon.test”)

FileInputStream  inTwo = new FileInputStreamf);

 

创建FileOutputStream实例对象时,还可以指定还不存在的文件名,不能指定一个已被其他程序打开了的文件

思考:要将A文件的内容写入B文件,在代码程序中是输出类对象海华丝输入类对象来连接A文件饼完成对A文件的操作呢??

 

输入类来读取a文件中的内容,创造一个输出类把内容写入到b文件

编程举例:

 FileOutputStream类像文件中写入一个字符串,然后用FileInputStream读出写入的内容。

 

定义一个字节数组

byte []  buf = new byte [1024];

转换字符串对象就是创建一个字符串,

 

read 方法不能直接去读一个字符串,因为read不知道在读到什么样的情况下才算一个字符串的结束,

ReaderWriter

1ReaderWrite类是所有字符串流类的抽象基类,用于简化对字符串的输入输出编程,即用于读写文本数据。(在字节中和FileInputStreamFileOutputStream的作用相似)

2:二进制文件和文本文件的区别

编程举例:FileWriter类向文件中写入一个字符串,然后用FileReader读出写入的内容。

 

PioedWrite 和PipedReader类

使用管道流类,可以实现各个程序模块之间的松偶合通信(有

强内聚,弱偶尔的特点)

 

 ByteArrayInputStream 与ByteArrayOutputStream 类

ByteArrayInputStream 与ByteArrayOutputStream 类用于以IO流的方式来完成对字节数组内容的读写,来支持类似内存虚拟文件或者内存映像文件的功能。

ByteArrayInputStream 的两个构造函数:

ByteArrayInputStream(byte[] buf)使用字节数组中的所有数据

ByteArrayInputStream(byte[] buf,int offset,int length)

 

ByteArrayOutputStream的两个构造函数

ByteArryOutputStream()创建一个32个字节反冲区

ByteArrayOutputStream(int)根据大小创建一个适合的反冲区

 

编写一个函数,把输入流中所有英文字母变成大写字母,然后将结果写入到一个输出流对象,用这个函数可来将一个字符串中的所有字符转化成大写(11806 02_06)

 

重视IO程序代码的复用

System.in 连接到键盘,是InputStream类型的实例对象。System.out连接到显示器是PrintStream类的实例对象。

 

不管各种底层物理设备用什么方式实现数据的终止点,InputStreamread方法重视返回-1来表示输入流的结束。

//程序从文件中读取

 

 

Unicode编码     UTF-8编码   uTf-16编码

 

02_11过滤流与包装类

包装类的概念与作用:

BufferedInputStream BufferedOutputStream 往文件中读取或者写入某些数据

DataInputStreamDataOutputStream

PrintStream

ObjectInputStreamObjectOutputStream

字节流与字符流的转换

例子:通过FileOutputStream对象讲一个浮点小数写入到文件中,有困难把,能否通过FileOutputStream对象直接将一个整数写入到文件中

 

 传递一个FileOutputStream输出流对象给DataOutputStream实例对象的用于写入浮点小数的方法。

DataOutputStream饼没有对应到任何具体的流设备,一定要给它传递一个对应任何具体流设备的输出对象,完成类似DataOutputStream功能的类就是一个包装类,也叫过滤流或者处理流。

 

DataOutputStream包装类的构造函数语法:

Public DataOutputStream(OutputStream out)

 

DataOutputStream的部分方法列表:

Public final void writeBooleanboolean v

 

缓冲流为I/O增加了内存缓冲区,增加缓冲区目的:

允许java程序一次不止操作一个字节,提高了程序的性能。

有了缓冲区,使得在流上执行Skipmarkreset方法都成为可能

DataInputStreamDataOutputStream

DataInputStream提供了3个写入字符串的方法

Public final void writeBytes(String s)

Public final void writeChars(String s)

Public final void writeUTF(String s)向目标设备写入字符串的长度而其他上面两个没有

关闭流栈中的最上层的流独享,将会自动关闭流栈中所有底层的流对象。

 

DataOutputStream

 

BufferedInputStream BufferedOutputStreamjava提供的两个缓冲区包装类,不管底层是否使用了缓冲区,这两个类在自己的实力对象中创建缓冲区。

底层缓冲区是一下子创建很多,然后又一下子使用很多

BufferedInputStream的两个构造函数

BufferedInputStream (InputStream in)(创建32个字节缓冲区大小)

BufferedInputStream (InputStream in ,int size)

BufferedOutputStream类的两个构造函数(主要是对输出流进行反冲区包装,提高反冲区性能)

BufferedOutputStreamOutputStream out)(创建500个字节的反冲区域)

 BufferedOutputStreamOutputStream out,int size)根据反冲区大小来创建字节

 

BufferedReaderReadLne方法可以一次读取一行文本,BufferedWrite newLine方法可以向字符流中写入不同操作系统下的换行符

 

PrintStream

提供了一系列的printprintln方法,可以将基本数据类型的数据格式转化成为字符串输出。

 

格式化输出:就是按照字符串的格式输出

PrintStream 3个构造函数

PrintStreamOutPutStream out

PrintStream OutputStream outboolean autoflush

PrintStream OutputStream outboolean autoflushString encoding

 

ObjectInputStreamObjectOutputStream

ObjectInputStream ObjectOutputStream类这两个包装类,用于从底层输入流中读取对象的数据类型和将对象类型的数据写入到底层输出流。

 

ObjectInputStream ObjectOutputStream类所读的对象必须实现了Serializable接口。对象中的transienstatic类型的成员变量不会被读取和写入。(Serializable接口没有任何方法)

一个可以被序列华的MyClass类的定义

          Public class MyClass  implements Serializable {

         Public transient Thread t;

         Private String customerID;

         Private int total;

}

 

  能不能找到一种简单的方恨死来读取键盘上输入的一行字符,如何找??

  InputStreamRader OutputStreamWriter,是用于将字节流转换成字符串流来读写的两个类

 

2-14java程序和其他进程的数据通信

 

 02-15字节输入流                                       

最后linenumber过时。

 
字符输入流类

字符输出流类

Decorator 设计模式

在程序中,用一个对象包装另外的一个对象,这是一种被称为Decorator的设计模式

 

android培训、java培训、期待与您交流! ----------------------
包装类的概念与作用:

OutputStream作为DataOutputStream输出类的对象类型

public DataOutputStream(OutputStream out)

BufferedReader(Reader in)
          
创建一个使用默认大小输入缓冲区的缓冲字符输入流。

 

BufferedReader(Reader in, int sz)
          
创建一个使用指定大小输入缓冲区的缓冲字符输入流。
android培训、java培训、期待与您交流! ----------------------

你可能感兴趣的:(黑马程序员--IO输入与输出)