A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卞建彬 中级黑马   /  2018-9-28 16:51  /  993 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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类
作用:把内存中的字符数据写入到文件中.
​        构造方法:
  • FileWriter(File file): 创建一个新的 FileWriter,给定要读取的File对象。   
  • FileWriter(String fileName): 创建一个新的 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(基本流, "编码")
能够说出打印流的特点:
  • 只有输出, 没有输入
  • 不会抛IOException
  • 有特有的方法 print() println()原样输出

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文件    通过网络流发送到客户端

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马