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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-10-11 17:22 编辑
第九天的整理笔记:

IO流的分类和功能:   
     字节流(byte)  字符流(char  String)
     分输入流(读)和输出流(写)
字节输出流格式:
      FileOutputStream fos = new FileOutputStream("路径");
      fos.write(字节或字节的数组);
      fos.close;  //释放资源
字节输入流格式:
      FileInputStream fis = new FileInputStream("文件路径");
      int by (数据) = fis.read();  // 一次读一个字节
      int len (个数) = fis.read(数组);  // 一次读一个字节数组
      fis.close();   //  释放资源
读数据read方法的原理:
      byte[] bytes = new byte[2];  ABCDE
      read(bytes); // AB  2个字节
      read(bytes); // CD  2个字节
      read(bytes); // ED  1个字节
使用字节流完成文件的复制:
      FileInputStream fis = ...; // 数据源
      FileOutputStream fos = ..;  // 目的地
      int by;
      while ((by = fis.read()) != -1) {     //循环读写,一次写一个字节
      fos.write(by);
      }
      //或者这种一次读写一个数组
      byte[] bytes = new byte[1024];
      int len;
      while ((len = fis.read(bytes)) != -1) {
      fos.write(bytes, 0, len);
      }
      close;    //释放资源
使用FileWriter字符流写数据到文件:
      //创建对象
      FileWirter  file = new FileWirter(路径);
      file.write(写内容(char   char[]   String   ) );
      file.close;    //释放资源
FileWriter中关闭和刷新的区别:
      close(): 刷新缓冲区,并释放,不能操作流程对象
      flush(): 刷新缓冲区,能操作流对象
FileWriter写数据实现换行和追加写:
      windows系统:"\r\n";
      追加写: boolean append构造后  传true
使用FileReader读数据:
      //创建流对象
      FileReader fr = new FileReader(路径);
      read()
         char/char[]
      fr.close;     //释放资源
使用FileReader读数据一次一个字符数组:
      char[] chs = new char[1024];
      int len;
      while ((len = fr.read(chs))!=-1){}


Properties类

基本的存储方法
public Object setProperty(String key, String value) : 保存一对属性。  
public String getProperty(String key) :用此属性列表中指定的键搜索属性值。
public Set<String> stringPropertyNames() :所有键的名称的集合。


day09补充总结:
        
IO流: Input 和 Output 数据流
输入:从硬盘文件读取到内存      输出:从内存(java程序)写入到硬盘
入和出是相对于内存说的   输入是read    输出是write


字节流:
     字节输入流 InputStream
     字节输出流 OutputStream
字符流:
     字符输入流: Reader和FileReader:
     字符输出流: Writer和FileWriter


字节流 和 字符流 如何选择:
        1. 如果不确定读写的是什么类型的数据, 用字节流最通用
        2. 如果确定读写的就是文本, 用字符流最方便


Properties双列集合:
        键和值都是 String 类型


java.util.Properties类: 属性集, 属于Map的双列集合, 继承自Hashtable
FileWriter fw = new FileWriter("day09\\prop.txt");
// 将Properties集合中的数据, 写入到文件 store()
properties.store(fw, null);

添加流对象:
        Properties properties = new Properties();
        // 创建文件字符输入流对象
        FileReader fr = new FileReader("day09\\prop.properties");
       // 从硬盘上读取到集合: load()
        properties.load(fr);




第十天的整理笔记:


使用字节缓冲流读取数据到程序:格式
       BufferedInputStream bis = new BufferedInputStream(FileInputStream的对象);
       bis.read( );   //读取文件
       bis.close();    //释放资源
使用字节缓冲流写出数据到文件:格式
      BufferedOutputStream bos = new BufferedOutputStream(FileOutputStream的对象);
       bos.write() ;   //写文件
       bos.close();    //释放资源
字符缓冲流的作用和用法;
       BufferedReader / BufferedWriter     //提高基本流的读写效率
       格式:
       BufferedReader br = new BufferedReader (FileReader对象);
       br.read();    //读取文件
       br.close();    //释放资源
       BufferedWriter bw = new BufferedWriter (FileWriter对象);
       bw.write();    //写文件
       bw.close();    //释放资源
缓冲流的特殊功能:
       BufferedReader
            String readLine():    不会返回换行符
       BufferedWriter
            void newLine():    可以根据系统自动确定换行符
使用转换流读取和写入指定编码的文本文件:
       InputStreamReader  /  OutputStreamWriter
       new  InputStreamReader(基本流,"编码");
       new OutputStreamWriter(基本流,"编码");
打印流的特点:
       1.只有输出,没有输入

       2.不会抛出IOException






Day10补充总结:

缓冲流

字节缓冲流
        |_ BufferedInputStream     # 缓冲字节输入流
        |_ BufferedOutputStream    # 缓冲字节输出流
字符缓冲流
        |_ BufferedReader          # 缓冲字符输入流
        |_ BufferedWriter          # 缓冲字符输出流
缓冲流的原理:
底层也是使用基本流来读写,但缓冲流内部定义了一个缓冲数组, 在读的时候类似于我们一次读一个数组的方式, 减少磁盘操作次数, 主要功能就是提高了程序效率

转换流

java.io.Reader
        |_ InputStreamReader:          转换字符输入流    byte --查指定码表--> char, char[], String
                |_ FileReader                         byte --查UTF-8码表--> char
java.io.Writer
        |_ OutputStreamWriter:        转换字符输出流    char, char[], String --查指定码表--> byte
                |_ FileWriter                     char --查UTF-8码表--> byte

乱码原因: 读写编码不一致

编码:字符 -> 字节  'a' -> 97
解码: 字节 -> 字符  97 -> 'a'

编码表: 字符和二进制数字的对应规则

字符集和编码表: 字符集包含编码表
ASCII字符集
ASCII编码表
ISO-8859-1字符集: Tomcat
                Latin-1: 拉丁字符. 没有中文. 每个字符由1个byte组成
GB字符集
                GB2312编码表: 每个字符由2个byte组成
                GBK编码表: 每个字符由2个byte组成
                GB18030编码表: 每个字符由1, 2, 4个byte组成
Unicode字符集
                UTF-8: ASCII字符占1个byte, 拉丁字符占2个byte, 中文占3个byte, Unicode辅助字符占4个byte
                UTF-16
                UTF-32
ANSI: 表示使用系统默认编码表

序列化流

序列化: 内存中的对象转换为字节序列, 以流的方式写入到磁盘的文件中
对象转字节
反序列化: 磁盘文件中的字节序列, 以流的方式读取到内存中变成对象
字节转对象

通过序列化流, 我们可以将内存中的数据方便的存储到磁盘上, 下次程序启动后也能从磁盘读取恢复之前的对象状态。

OutputStream
        |_ ObjectOutputStream类: 对象字节输出流
InputStream
        |_ ObjectInputStream类: 对象字节输入流
                注意:1、transient 修饰的成员变量, 不能被序列化。
2、被读写的对象的类, 必须实现 java.io.Serializable 接口, 否则会抛出 NotSerializableException
打印流

PrintStream特点:

        1. 只有输出流, 没有输入流
        2. PrintStream不会抛出IOException
        3. 有特殊方法 print(), println(), 可以输出任意类型的值
          构造方法
        PrintStream(File file):  创建字节打印流, 输出到一个文件
PrintStream(OutputStream out):  创建字节打印流, 输出到一个字节输出流
        PrintStream(String fileName):  创建字节打印流, 输出到一个文件路径




第十一天的整理笔记:


Day11



网络通信

网络通信协议概念:
        通信协议是计算机必须遵守的规则, 只有遵守这些规则, 计算机之间才能进行通信.
        协议中对数据的传输格式, 传输速率, 传输步骤等做了统一规定, 通信双方必须同时遵守, 最终完成数据交换
        (类似于一种语言, 语法语速做了规定)


TCP/IP协议:
        Transmission Control Protocol/Internet Protocol, 传输控制协议/因特网互联协议.
它定义了计算机如何连入因特网, 以及数据如何在它们之间传输的标准. 它的内部包含一系列的用于处理数据通信的协议, 并采用了4层的分层模型,
每一层都呼叫它的下一层所提供的协议来完成自己的需求

网络编程三要素:
        1. 通信协议  TCP
        2. IP地址
        3. 端口号

UDP: User Datagram Protocol, 用户数据报协议
特点:
1. 无连接的不可靠协议
2. 数据按包发送, 64K一个包
3. 速度快效率高, 容易丢包
(  用于视频直播, 网络电话 )
TCP: Transmission Control Protocol, 传输控制协议
特点:
1. 需要建立连接的可靠协议  电话
2. 数据传输无大小限制
3. 速度慢效率低   重发机制

   ( 用于文件下载, 浏览网页 )
TCP通信的三次握手:
1. 客户端向服务端发送验证信息, 等待服务器确认
2. 服务端收到验证信息后, 回复客户端验证信息, 同时发自己的验证信息
3. 客户端收到服务端回复的信息, 确认自己之前发的信息无误, 并再次向服务器发回服务端的验证信息

网络编程三要素

网络编程三要素:
1. 通信协议  TCP  
2. IP地址   特殊的IP地址: "127.0.0.1", "localhost", 都代表自己的电脑
3. 端口号  计算机中进程的唯一标识
取值范围: 0~65535的整数, 其中0~1024不建议使用

例如:
http:// www.baidu.com :80
------  ------------- ---
协议     IP地址      端口

TCP通信

ServerSocket类: TCP服务端

构造方法
ServerSocket(int port): 创建一个TCP服务端, 并监听指定端口

成员方法
accept(): 监听数据, 会阻塞. 收到数据后返回Socket对象
close(): 关闭服务端ServerSocket

Socket类: TCP客户端

构造方法
Socket(String ip, int port): 创建TCP客户端对象
成员方法
getOutputStream(): 获取输出流对象, 用于发送数据
getInputStream(): 获取输入流, 用于接收数据
shutdownOutput(): 关闭输出流, 告知服务端数据发送完毕
close(): 关闭客户端Socket


TCP严格区分为 客户端(Client) 与 服务端(Server)

两端通信时步骤
1. 服务端程序需要先启动, 等待客户端的连接
2. 客户端主动连接服务器端, 连接成功才能通信. 服务端不可以主动连接客户端
两端间以 "IO字节流" 进行通信、一个服务端可以和多个客户端同时通信



Day11补充总结:

TCP协议下两个常用类的名称;
       客户端: Socket
       服务器端:   SeverSocket
编写TCP客户端:
      //创建客户端Socket对象,同时指定要连接的服务端的IP地址和端口号
  Socket socket = new Socket("127.0.0.1", 8888);
//获取客户端的输出流对象
  OutputStream os = socket.getOutputStream();
//通过输出流对象写数据
os.write("你好,服务器".getbytes());
//接收服务器的响应
InputStream is = socket.getInputStream();
       byte[] bytes = new byte[1024];
       int len = is.read(bytes);
       String s = new String(bytes, 0, len );
       System.out.println(s );
//关闭客户端,释放资源
   socket.close;
编写TCP服务器端:
       //创建服务端Serversocket对象,并指定服务端监听的端口8888
ServerSocket sever = new ServerSocket(8888);
//等待客户端连接
Socket socket = server.accept();
//接收客户端发来的数据,相当于读取,获取输入流
InputStream is = socket.getInputStream();
//读取
byte[] bytes = new byte[1024];
         int len = is.read(bytes);
         String s = new String(bytes, 0, len);
         System.out.println(s);
//向客户端回写信息,
OutputStream os = socket.getOutputStream();
          os.write("收到,谢谢" . getbytes());
          //释放支援
socket.close();
          server.close();
文件上传案例:
       客户端里边:
         1.  读取磁盘图片
          2. 通过网络流写出
          3.通过网络流读取服务端的响应
         服务器端里边:
         1. 通过网络流读取上传的数据
         2.写入磁盘保存图片
         3.通过网络流发送响应
TCP协议下B/S案例:
         客户端是浏览器
         服务器端:





                                                                                                                                                                            完成小组:"学费很贵,莫要荒废":







0 个回复

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