java学习第三十天内容

1.前一天重点内容复习

        IO流的分类

                按照方向划分

                        输入流,进行读操作

                        输出流,进行写操作

                按照流类型划分

                        字节流,以字节形式读取数据

                        字符流,以字符形式读取数据

                流的方向及类型划分

                        字节输入流,InputStream

                                 FileInputStream:文件字节输入流 

                                 BufferedInputStream:字节缓冲输入流

                        字节输出流,OutputStream  

                                FileOutputStream:文件字节输出流                                 

                                BufferedOutputStream:字节缓冲输出流

                        字符输入流,Reader

                                InputStreamReader字符转换输入流              

                                FileReader:字符转换输入流便捷类

                        字符输出流,Writer

                                OutputStreamWriter字符转换输出流

                                 FileWriter:字符转换输出流便捷类

        静态代理:代理模式的一种

                思想:让代理角色帮助真实角色完成一些事情,使真实角色专注于自己的事情,静态代理对真实角色的功能做一个增强处理

                条件:真实角色和代理角色都必须实现同一个接口

        单例设计模式

                单例模式:内存中始终只有一个类对象存在

                实现方式

                        饿汉式:永远不会出现问题的单例模式

                                1.在类成员位置,创建一个静态实例变量

                                2.构造方法私有化,外界不能够创建对象,保证安全性

                                3.提供静态的公共访问方法,返回值就是当前类本身

                        懒汉式:可能会出现安全问题的单例模式

                                1.在类的成员位置,声明当前类的静态变量

                                2.构造方法私有化,外界类不能创建对象,保证安全性

                                3.判断当前静态变量是否为空,用的时候才去创建对象

2.字节缓冲输入流

        BufferedReader

                成员方法

                        public int read() throws IOException:一次读取一个字节

                        public String readLine() throws IOException:一次读取一行内容,返回值为null,来判断读完毕

3.字节缓冲输出流

        BufferedWriter

                成员方法

                        public String newLine() :写入一个分隔符号,以此来实现换行

4.使用字节缓冲输入流来代替Scanner类对象

        核心思想为将使用Scanner类中的nextLine()方法去读数据的方式替换为字节缓冲输入流对象的readLine()方法的方式去读数据

        Scanner sc = new Scanner(System.in);可拆分为

                InputStream in = System.in;

                Scanner sc = new Scanner(in);

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));可拆分为

                InputStream in = System.in;

                nputStreamReader ir = new InputStreamReader(System.in);

                BufferedReader br = new BufferedReader(ir);

5.SequenceInputStream

        介绍:文件合并流,将多个文件字节流串联,依次读取到此流中

        构造方法:

                public SequenceInputStream(InputStream s1,InputStream s2):将两个文件的字节流读入此流

                public SequenceInputStream(Enumeration<? extends InputStream> e):操作两个以上文件,将这些文件的字节流全部写入此文件合并流中

6.序列化流

        ObjectOutputStream:将一个java对象的原始数据变为流数据在网络中传输,前提条件为此对象必须实现标记接口Serializable(序列化接口)

                构造方法:

                        public ObjectOutputStream(OutputStream out) throws IOException:创建序列化流对象

                成员方法:

                        public final void writeObject(Object obj) throws IOException():将对象信息写入序列化流对象

7.反序列化

        ObjectInputStream:将网络中传输的对象流数据转为具体对象信息

                构造方法

                        public ObjectInputStream(InputStream in) throws IOException:创建反序列化对象

                成员方法

                        public final Object readObject() throws IOException,ClassNotFoundException:将对象的流数据转为具体对象

8.InvalidClassException异常

        名称:序列化版本ID异常

        出现原因:因为序列化时,类中的相关编码信息会产生一个序列化版本ID,当修该该类成员时,就会产生一个新的序列化版本ID,因为在反序列化中需要比较在内存中的流的序列化版本ID和源文件流的版本ID,不一致时,就会报错

        解决方法:勾选设置序列化ID的相关设置,使序列化版本ID为一个静态常量,也可以通过关键字transient修饰不参与序列化的成员,修改时不影响序列化版本ID

9.Properties

        介绍:属性列表,描述一组属性及属性值,属性及属性值均为String类型,可以保存到流中或者从流中加载,继承自HashTable<K,V>,实现Implements Map<K,V>接口,可以使用Map的基本功能添加功能put(K,V),获取所有键功能keySet(),通过键获取值功能get(K key),但是在此不使用这些功能

        特有功能:

                添加属性及属性值

                        public Object setProperty(String key,String value)

                遍历属性列表中所有的键

                        public Set<String> stringPropertyNames()

                通过键获取值

                        public String getProperty(key)

                将指定文件内容加载到属性列表中

                        load(Reader reader/InputStream)

                将属性列表的内容保存到指定文件中

                        store(Writer writer,String comments):参数2为对属性列表的信息描述

10.网络编程

        网络:不同地域位置不同计算机通过通信线路相互连接,就形成网络

        网络编程:就是某个程序在不同计算机之间进行数据传输

         网络编程三要素

                ip地址

                        A类:前一个号段为网络号段,后三个为主机号段

                        B类:前两个号段为网络号段,后两个为主机号段

                        C类:前三个号段为网络号段,后一个为主机号段

                port端口

                        0~65535

                                0~1024为保留端口

                协议

                        UDP协议:不可靠,不需要建立通道,数据大小有限制,通过数据报包传递数据

                        TCP协议:可靠,需要建立通道,数据大小没有限制,通过字节流传输数据

11.Socket编程

        介绍:就是使用套接字流的方式发送和接受数据

        特点:两端都必须有Socket对象,而且发送端要有ip和端口号,接受端有端口号

12.InetAddress

        介绍:该类表示Internet协议的IP地址

        成员方法:

                public static InetAddress getByName(String host) throws UnKnownHostException:通过主机名称(计算机全名)获得ip地址文本的字符串形式,返回值代表互联网的IP地址

                public String getHostAddress():通过ip地址对象获取ip地址的字符串形式

13.UDP发送端及接受端实现

        发送端

                1.创建发送端的Socket对象:DatagramSocket用于发送或者接受数据报包的套接字

                        public DatagramSocket() throws ScocketException

                2.创建一个数据报包:DatagramPacket

                        public static InetAddress getByName(String host):将ip地址的字符串形式转为ip地址对象

                        public DatagramPacket(byte[] buf,int length,InetAddress address,int port)

                3.使用UDP发送端的Socker发送数据报包

                        public void send(DatagramPacket p) throws IOException

                4.释放资源

        接受端

                1.创建接收端Socket对象

                        public DatagramSocket(int port) throws SocketException

                2.创建一个自定义缓冲字节数组作为参数传入数据报包构造方法,创建接受容器

                        public DatagramPacket(byte[] buf,int length)

                3.通过接受容器接受数据报包

                        public void receive(DatagramPacket p) throws IOException

                4.解析数据报包

                        public byte[] getData():接受容器调用此方法可以获取到数据报包中的真实数据

                        public int getLength():接受容器调用此方法可以获取到数据报包的真实长度

                5.展示数据

                        public InetAddress getAddress():接受容器调用此方法可以获取到数据报包的ip地址的字符串形式

                6.释放资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值