day09 今日API IO流:java.io.OutputStream抽象类: 字节输出流 (顶层类) // 成员方法 void close() :释放资源 void?flush() :刷新缓冲区(对于字节流来说没有作用) // 写字节的成员方法 abstract void?write(int?b): 一次写一个字节 (参数是int是为了代码中写表示byte的整数方便不用强转) void?write(byte[]?b): 一次写一个字节数组 void?write(byte[]?b,?int?off,?int?len): 一次写一个字节数组的一部分 java.io.FileOutputStream类: 文件字节输出流 (向文件写数据) // 构造方法 FileOutputStream(String?name): 通过文件路径创建文件字节输出流 FileOutputStream(File?file): 通过File对象创建文件字节输出流 FileOutputStream(String?name, boolean append): 通过文件路径创建文件字节输出流, true可以续写 FileOutputStream(File?file, boolean append): 通过File对象创建文件字节输出流, true可以续写 java.io.InputStream抽象类: 字节输入流 (顶层类) // 常用成员方法 void?close(): 释放资源 // 读数据的方法 int?read(): 一次读一个字节. 读到文件末尾返回-1 (返回int也是为了代码编写方便) int?read(byte[]?b): 一次读一个字节数组. 读到的字节存放在参数中的字节数组中, 返回int值是本次读到的字节的个数. 读到文件末尾返回-1 java.io.FileInputStream类: 文件字节输入流 // 构造方法 FileInputStream(String?name): 使用文件路径创建文件字节输入流 FileInputStream(File?file): 使用File对象创建文件字节输入流 java.io.Reader抽象类: 字符输入流 (顶层) // 常用成员方法 void?close() :关闭此流并释放与此流相关联的任何系统资源 // 读数据的方法 int?read(): 一次读一个字符char, 返回读到的字符. 读到文件末尾返回-1 (返回int为了代码编写方便) int?read(char[]?cbuf): 一次读取一个字符数组char[]. 返回读取的字符个数. 读到文件末尾返回-1 java.io.FileReader类: 文件字符输入流 // 构造方法 FileReader(File?file): 根据File对象创建文件字符输入流 FileReader(String?fileName): 根据File对象创建文件字符输入流 java.io.Writer抽象类: 字符输出流 (顶层类) // 常用成员方法 abstract void?close(): 刷新缓冲区并释放资源 abstract void?flush() :刷新缓冲区 // 写 void?write(int?c): 写一个字符 (int类型为了代码编写方便) void?write(char[]?cbuf): 写一个字符数组 abstract void?write(char[]?b,?int?off,?int?len): 写一个字符数组的一部分 void?write(String?str): 写一个字符串 void write(String str, int off, int len): 写一个字符串的一部分 java.io.FileWriter类: 文件字符输出流 // 构造方法 FileWriter(File?file): 通过File对象创建文件字符输出流 FileWriter(String?fileName): 通过文件路径创建文件字符输出流 FileWriter(File?file, boolean append): 通过File对象创建文件字符输出流. 第二个参数为true可以续写 FileWriter(String?fileName, boolean append): 通过文件路径创建文件字符输出流. 第二个参数为true可以续写 集合:java.util.Properties类: 属性集, 属于Map的双列集合, 继承自Hashtable // 构造方法 Properties(): 创建一个Properties集合 // 可以使用Map接口中的方法 // 特有成员方法 Object?setProperty(String?key,?String?value): 保存/替换键值对 String?getProperty(String?key): 通过键获取值. 键不存在返回null Set<String> stringPropertyNames(): 返回键的集合 void store(OutputStream out, String comments): 将集合数据用字节流写入文件(不能中文), 并写入注释 void store(Writer writer, String comments): 将集合数据用字符流写入文件(可以中文), 并写入注释 void load(InputStream inStream): 从配置文件中通过字节流加载数据到Properties集合(不能读中文) void load(Reader reader): 从配置文件中通过字符流加载数据到Properties集合(可以读中文) IO流IO流:input输入流和output输出流 流:数据(字符,字节) 1个字符=2个字节 1个字节=8个二进制
输入流 输出流
字节流 字节输入流 InputStream 字节输出流 OutputStream
字符流 字符输入流 Reader 字符输出流 Writer 输入:从硬盘(文件)读取到内存(java程序) 输出:从内存(java程序)写入到硬盘(文件) IO流分类字节流 计算机中存储数据一切皆为字节 字节输出流:java.io.OutputStream抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。 public void close() :关闭此输出流并释放与此流相关联的任何系统资源。 public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。 public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。 public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 public abstract void write(int b) :将指定的字节输出流。
FileOutputStream:文件字节输出流 作用:把内存中的数据写入到硬盘中 构造方法 :public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。 public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件。 构造方法的作用: 1.创建一个FileOutputStream对象 2.会根据构造方法中传递的路径,在磁盘上创建一个空文件(若文件存在则会清空数据) 3.将创建的FilePutputStream对象指向这个磁盘上的文件. 字节输出流的使用步骤(重点): 1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地. 2.调用FileOutputStream对象中的方法write,把数据写入到文件中 3.释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提供程序的效率) 一次写入多个字节的方法: public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。 public void write(byte[] b, int off, int len) : 从指定的字节数组写入 len字节,从偏移量 off开始输 出到此输出流。 如果写的第一个字节是整数(0-127),那么显示的时候会查询ASCII表
如果写的第一个字节是负数,那么第一个字节回合第二个字节,两个字节组成一个中文.
写入字符的方法:可以使用String类中的方法把字符串,转换为字节数组
byte[] bytes="你好".getBytes();
sout(Arrays.toString(bytes));
fos.write(bytes);追加写/续写: FileOutputStream(String name, boolean append)创建一个向具有指定name的文件写入数据的流出文件流 参数: boolea append:追加写开关 true:创建对象不会覆盖源文件,,继续在文件的末尾追加写数据. false:创建一个新文件,覆盖源文件 windows:\r\n为换行符 linux:/n max:/r FileinputStream:文件字节输入流java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。 FileinputStream:作用:把硬盘文件中的数据,读取到内存中使用 public void close() :关闭此输入流并释放与此流相关联的任何系统资源。 public abstract int read(): 从输入流读取数据的下一个字节。 读到文件末尾返回-1. public int read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。 返回int值是本次读到的字节的个数,读到文件末尾返回-1. 构造方法: FileinputStream(String name):使用文件路径创建文件字节输入流 FileinputStream(File file):使用File对象创建文件字节输入流 作用: 1.创建FileinputStream对象 2.将FileinputStream对象指向磁盘上的文件 FileinputStream读取数据的步骤: 1.创建FileinputStream对象 2.使用FileinputStream对象中的方法read,读取文件 3.释放资源 布尔表达式(len=fis.read())!=-1 1.fis.read():读取一个字节 2.len=fis.read():把读取到的字节赋值给变量len 3.(len=fis.read())!=-1:判断变量len是否返回-1;
使用字节数组读取:(一次读取多个字节) String read(byte[] b),每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回-1 String read(byte[] b, int offset, int length) 注意: 1.方法的参数byte[]作用 起到缓冲作用,存储每次读取到的每个字节 数组的长度一把定义为1024或其整数倍 2.方法的返回值int是什么 返回的是有效读取的字节个数 字符流:使用字节流读取中文文件1个中文: GBK:占两个字节 UTF-8:占用3个字节 字符输入流[Reader]java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。 public void close() :关闭此流并释放与此流相关联的任何系统资源。 public int read(): 从输入流读取一个字符。 public int read(char[] cbuf): 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。 FileReader类:
FileReader extends InputStreamReader extends Reader构造方法: FileReader(String fileName):根据File对象创建字符输入流 FileReader(File file):根据File对象创建文件字符输入流 String类的构造方法: String(char[] value)把字符数组转换为字符串 String(char[]vale,int offset,int cout)把字符数组转换为字符串. 字符输出流【Writer】
void write(int c) 写入单个字符。 void write(char[] cbuf)写入字符数组。 abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。 void write(String str)写入字符串。 void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。 void flush()刷新该流的缓冲。 void close() 关闭此流,但要先刷新它。
FileWriter类作用:把内存中的字符数据写入到文件中. 构造方法: 当你创建一个流对象时,必须传入一个文件路径,类似于FileOutputStream。 字符输出流的使用步骤(重点): 1.创建 FileWriter对象,构造方法中绑定要写入数据的目的地 2.使用 FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程) 3.使用 FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中 4.释放资源 flush方法和close方法的区别 flush:刷新缓冲区,流对象可以继续使用 close:先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用了. 备注: flush()可以省略. 续写和换行FileWriter(String fileName,boolean append) FileWriter(File file ,boolean append) 换行: widows:\r\n linux:/n mac:/r 不确定类型的数据,用字节流最通用 如果确定读写就是文本,用字符流最方便 Properties类
属性集,属于Map的双列集合,继承自Hashtable.
Properties 类表示了一个持久的属性集.Properties可保存在流中或从流中加载
Properties集合是一个唯一和IO流相结合的集合
可以使用Properties集合中的store,把集合中的临时数据,持久化写入到硬盘中存储
可以使用Properties集合中的load,把硬盘中保存的文件(键值对),读取到集合中使用.
每一对键值对都是字符串.构造方法: public Properties() :创建一个空的属性列表。 基本的存储方法: public Object setProperty(String key, String value) : 保存一对属性。 public String getProperty(String key) :通过键获取值。 public Set<String> stringPropertyNames() :所有键的名称的集合。
补充: 属性集(配置文件),标准的后缀是.Properties 配置文件格式要求:
一行一个键值对
键和值中间用=分割(标准格式,胆空格分开也行)
#表示单行注释public void store(outputStream inStream) public void load(InputStream inStream): 从字节输入流中读取键值对。 public void Reader(InputStream inStream): 从字符输入流中读取键值对。 day10 今日API java.io.BufferedOutputStream类: 缓冲字节输出流 // 构造方法 BufferedOutputStream(OutputStream out): 使用基本流创建一个缓冲字节输出流 BufferedOutputStream(OutputStream out, int size): 使用基本流创建一个缓冲字节输出流, 设置缓冲区大小 java.io.BufferedInputStream类: 缓冲字节输入流 // 构造方法 BufferedInputStream(InputStream in): 使用基本流创建一个缓冲字节输入流 BufferedInputStream(InputStream in, int size): 使用基本流创建一个缓冲字节输入流, 设置缓冲区大小 java.io.BufferedWriter类: // 构造方法 BufferedWriter(Writer out): 使用基本流创建一个缓冲字符输出流 BufferedWriter(Writer out, int size): 使用基本流创建一个缓冲字符输出流, 设置缓冲区大小 // 特有方法 void newLine(): 写入一个换行符, 换行符自动根据当前系统确定 java.io.BufferedReader类: 缓冲字符输入流 // 构造方法 BufferedReader(Reader in): 使用基本流创建一个缓冲字符输入流 BufferedReader(Reader in, int size): 使用基本流创建一个缓冲字符输入流, 设置缓冲区大小 // 特有方法 String readLine(): 一次读一行字符串, "不包含换行符". 读到文件末尾返回null java.io.OutputStreamWriter类: 输出转换流. 字符流通往字节流的桥梁 // 构造方法 OutputStreamWriter(OutputStream out): 使用默认编码表创建转换流 OutputStreamWriter(OutputStream out, String charsetName): 使用指定编码表创建转换流 java.io.InputStreamReader类: 输入转换流. 字节流通往字符流的桥梁 // 构造方法 InputStreamReader(InputStream in): 使用默认编码表创建转换流 InputStreamReader(InputStream in, String charsetName): 使用指定编码表创建转换流 java.io.ObjectOutputStream类: 对象字节输出流 // 构造方法 ObjectOutputStream(OutputStream out) // 特有成员方法 void writeObject(Object obj): 将对象写出 java.io.ObjectInputStream类: 对象字节输入流 // 构造方法 ObjectInputStream(InputStream in) // 特有成员方法 Object readObject(): 读取对象 java.io.PrintStream类: 字节打印流 // 构造方法 PrintStream(File file): 创建字节打印流, 输出到一个文件 PrintStream(OutputStream out): 创建字节打印流, 输出到一个字节输出流 PrintStream(String fileName): 创建字节打印流, 输出到一个文件路径 java.lang.System类: // 静态方法 static void setOut(PrintStream out): 设置System.out的输出目的地为参数的打印流 能够使用字节缓冲流读取数据到程序: BufferedInputStream bis = new BufferedInputStream(基本流对象FileInputStream);bis.read()bis.close() 能够明确字符缓冲流的作用和基本用法: BufferedReader/BufferedWriter 提高基本流的读写效率 BufferedReader br = new BufferedReader(基本流FileReader);br.read()br.close() 能够使用缓冲流的特殊功能: BufferedReader String readLine(): 不会返回换行符BufferedWriter void newLine(): 可以根据系统自动确定换行符 能够使用转换流读取指定编码的文本文件: InputStreamReadernew InputStreamReader(基本流, "编码") 能够使用转换流写入指定编码的文本文件: OutputStreamWriternew OutputStreamWriter(基本流, "编码") 能够说出打印流的特点: day11 今日API java.net.ServerSocket类: TCP服务端 // 构造方法 ServerSocket(int port): 创建一个TCP服务端, 并监听指定端口 // 成员方法 Socket accept(): 监听数据, 会阻塞. 收到数据后返回Socket对象 void close(): 关闭服务端ServerSocket java.net.Socket类: TCP客户端 // 构造方法 Socket(String ip, int port): 创建TCP客户端对象 // 成员方法 OutputStream getOutputStream(): 获取输出流对象, 用于发送数据 InputStream getInputStream(): 获取输入流, 用于接收数据 void shutdownOutput(): 关闭输出流, 告知服务端数据发送完毕 void close(): 关闭客户端Socket 能够辨别UDP和TCP协议特点: UDP: 1. 无连接的不可靠协议 2. 以包发送, 64k一个包 3. 速度快效率高, 容易丢包TCP: 1. 有连接的可靠协议 2. 传输数据没有大小限制
3. 速度慢效率低, 安全性高能够说出TCP协议下两个常用类名称:" 客户端: Socket 服务端: ServerSocket 能够编写TCP协议下字符串数据传输程序: 客户端Socket获取流发送和接收服务端等待客户端连接, 通过客户端获取流, 接收发送 能够理解TCP协议下文件上传案例: 上传图片 客户端: 读取磁盘图片 通过网络流写出 通过网络流读取服务端的响应服务端: 通过网络流读取上传的数据 写入磁盘保存图片 通过网络流发送响应 能够理解TCP协议下B/S案例: 客户端: 浏览器服务端: 通过网络流读取客户单发来的数据(处理) 读取磁盘的html文件 通过网络流发送到客户端
|