File, 封装了文件名,只是一个名字,是内存里面的一个对象,
真正的文件,是硬盘上的一快存储空间
不等于-1就等于,文件还没有到结尾。
.read()!=-1 读到结尾就等于-1,读完了
一个管道队到数据源上,准备开始读数据。
一个管道对到一个文件上,准备开始读数据
instream, 是每次读一个字节(8位)
reader/writer是每次读写一个字符(一个字符2个字节16位,可以读一个中文字符出来)
FileOutPutStream("c:/shar")当你没有这个文件的时候,FileOutPutStream 会自动帮你建一个
管道用完了,要关闭
输入 输出流 是对程序来说输入还是输出。输入到 为你这个程序分配的内存区域里面去了。
stream 每次读一个字节,reader,writer每次读一个字符, 你需要定义一个变量接收读出来的每一个字节,或是字符。然后程序运行时会放到变量所在的内存区域中
reader read writer write 一个动词,是方法,一个名词是类名
如果要想将一个类的对象按照字节序列存盘,你就需要实现可序列化的接口,serializable是一个空 的接口,里面没有定义任何方法,他给类打一个标记给编译器看的,类可以被序列化。
把类的对象往磁盘里面的写的时候不会出错。可以直接用ObjectOutputstream 类对象的方法writeObject方法直接写进去一个对象,取出来的时候 是当做object类型取出来的,需要进行强转换
Serialzable 接口,标记接口标记一下,类的对象可以被序列化
一个管道堆到数据源上
输入流、输出流 : 对程序来说,输入输出
字节流,字符流 : 一下子读一个字符,一下子读一个字节, 读时候需要放到循环里面,写的时候也可能需要放到循环里面
节点流,处理流 : 外面包一个管子,提供更多的遍历的读方法,写方法
对内存中的字节数组进行读写 ByteArrayInputStream/OutputScream
ByteArrayInputStream :从一个字节数组中读数据到程序,程序中可以定义一个变量来接收他的参数。 构造管道的时候 需要传递一个参数是字节数组,可以把ByteArrayOutputStream 的对象即那个管道 调用 toByteArray()方法。
ByteArrayOutputStream :new一个类的对象时,是无参数的,内存中会new一个 变长的字节数组,并且一个管道堆到这个数组上,你在外面包一个处理流DataInputStream或者不包,d.writeBoolean,writeDouble 就向 字节数组中写数据了。
inputstream/outputstream,
reader/writer 都是抽象类
FileInputScream FileOutputStream 对文件的输入输出,fileOutputStream 类的构造方法,可以有一个参数true表示 向文件追加
FileReader fileWriter
Bufferedinputstream bufferedOutputStream
BufferedReader BufferedWriter bufferedReader 是一个小桶,可以一下子读一行出来readline(), 还可以向文件中写一个换行,newLine()
inputStreamReader/outputStreamwriter 转换流
pringStream/printwriter 套在其他流外面,可以打印多种数据类型的数据,当然内部调用的是其他类型的toString 方法
ObjectinputStream ObjectoutputStream(transient 透明的,serializable,externalizable自己可以控制对象怎么序列化)
可以直接读写一个Object ,但是这个类必须实现Serializable 接口, 将这个对象 转黄成字节序列存到磁盘文件上或者哪里,再读出来,进行强制类型转换(因为读出来的时候是按照Object类型拿出来的)
DateinputSream/DateoutputStream 直接读写基础的 数据类型.还可以写unicode字符串,utf8 比utf16 省空间,但是必须按照存入的顺序读出来
线程的调用,必须调用线程的start方法
先new 一个新的线程, 然后调用对象的start方法, 定义新的线程的时候必须传递一个对象,这个类的对象必须实现了runnable 接口中的run方法。