其他分享
首页 > 其他分享> > day33_学习总结

day33_学习总结

作者:互联网

day33_学习总结

BufferedReader/BufferedWriter

BufferedReader:从字符输入流中读取文本,缓冲各个字符,数组,数字,从而实现字符的高效读取
特有功能:
public String readLine() throws IOException
	读取一行,当读取到最后一行时返回null

BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而使字符高效写入
	public void newLine()throws IOException
		换行
//将当前目录下的文件a.txt复制到b.txt中
public class BufferTest {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("a.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
        String str = null ;
        while((str = br.readLine())!=null){
            bw.write(str);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }
}

通过BufferedReader实现键盘录入

import java.io.*;

public class BufferedReaderTest{
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line = br.readLine();
        System.out.println(line);
    }
}

递归

方法内部调用方法本身
条件:
	存在一个方法
	有一定的规律
	存在出口条件
eg:求一个数阶乘
public class DiGui {
    public static void main(String[] args) {
        System.out.println(jC(3));
        System.out.println(jC(5));
    }
    public static int jC(int num){
        if(num == 1){
            return 1;
        }else{
            return num * jC(num -1) ;
        }
    }
}

PrintStream—字节打印流

构造方法:
public PrintStream(OutputStream out,boolean autoFlush)
	创建具有自动刷新的打印流
方法:
print/println/printf()

PrintWriter—字符打印流

构造方法:
public PrintWriter(OutputStream out,boolean autoFlush)
	创建具有自动刷新的打印流
方法:
print/println/printf()
//练习,将a.txt中文件通过字符打印流打印到c.txt文件中
import java.io.*;

public class PrintTset {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("a.txt"));
        PrintWriter pw = new PrintWriter(new FileWriter("c.txt"),true);
        String line = null ;
        while((line = br.readLine())!= null){
            pw.println(line);
        }
        pw.close();
        br.close();
    }
}

SequenceInputStream—字节输入流的逻辑串联

同时操作两个文件
构造方法
SequenceInputStream(InputStream s1,InputStream s2)
	读取s1后读取s2
import java.io.*;

public class SequenceInputStreamTest {
    public static void main(String[] args) throws IOException {
        SequenceInputStream sis = new SequenceInputStream(new FileInputStream("a.txt"),
                new FileInputStream("b.txt"));
        PrintStream ps = new PrintStream(new FileOutputStream("d.txt"),true);

        byte[] bytes = new byte[1024];
        int len = 0 ;
        while((len =sis.read(bytes)) != -1){
            ps.write(bytes,0,len);
        }
    }
}

ObjectOutputStream/ObjectInputStream—序列化与反序列化

ObjectOutputStream---序列化---继承自OutputStream类
	将对象写入流中
构造方法:
	ObjectOutputStream(OutputStream out)
方法:
	writeObject(Object o)
		将指定的对象写入流中
	
ObjectInputStream---反序列化---继承自InputStream
	将流中的对象还原
构造方法:
	ObjectInputStream(InputStream in)
方法:
	Object readObject()
		将流中的对象读取出来,返回值为Object对象

Properties—持久的属性集

可以保存在流中或从流中加载
	继承自HashTable类(线程安全),具备Map集合的功能,键和值都是字符串String类型	
构造方法:
Properties()

方法:
	setProperty(String key,String value)
		添加功能
	Set<String> StringPropertyNames()
		获取属性集 的键集
	String getProperty(String key)
		通过键获取属性集的值
//遍历
import java.util.Properties;
import java.util.Set;

public class PropertiesTest {
    public static void main(String[] args) {
        Properties p = new Properties() ;
        p.setProperty("111","222") ;
        p.setProperty("333","444") ;
        p.setProperty("555","666") ;
        Set<String> strings = p.stringPropertyNames() ;
        for(String key : strings){
            String value = p.getProperty(key) ;
            System.out.println(key+"---"+value);
        }

    }
}

网络编程

网络编程三要素:
	ip地址:
		点分十进制法
			eg:192.168.1.1
		A类:第一个为网络号段,后三位为主机号段
        B类:前两个为网络号段,后两个为主机号段
        C类:私人地址,前三个为网络号段,后一个为主机号段
        	本地回环地址:127.0.0.1
	端口号:
		范围:0~65535
		0~1024:保留
	协议:
		UDP协议:
			不需要建立通道,不安全,传输速度快,属于不可靠连接,传输内容有大小限制
		TCP协议:
			需要建立通道,安全,传输速度慢,属于可靠连接,传内容大小不限

InetAddress类—地址

表示互联网协议IP地址
public static InetAddress getByName(String host) throws UnknownHostException
	通过已知的IP地址的字符串或者主机名来获取InetAddress对象(静态方法,通过类名.方法名来获取)
	
方法:
	String getHostName()
		获取IP地址的主机名
	String getHostAddress()
		获取IP地址的字符串表示
import java.net.InetAddress;
import java.net.UnknownHostException;

public class InetAddressTest {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress ia = InetAddress.getByName("WIN-CNQN8N6LOHJ");
        System.out.println(ia);

        System.out.println(ia.getHostAddress());
        System.out.println(ia.getHostName());
    }
}

UDP发送端的使用步骤

1>创建发送端的Socket对象
	DatagramSocket:用来表示发送和接收数据报包套接字
		构造方法:
			DatagramSocket()
				创建DatagramSocket对象
2>创建DatagramPacket对象
	DatagramPacket:表示数据报包
		构造方法:
			public DatagramPacket(byte[] buf,//包数据
                      int length,//包长度
                      InetAddress address,//IP地址
                      int port)//端口号
3>通过DatagramSocket类中的方法send方法发送包数据
	public void send(DatagramPacket p) throws IOException
		从此套接字发送数据报包
4>关闭资源
import java.io.IOException;
import java.net.*;

public class Send {
    public static void main(String[] args) throws IOException {
        //创建Socket对象
        DatagramSocket ds = new DatagramSocket() ;

        //创建数据报包
        byte[] bytes = "hello java!!!".getBytes() ;
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("WIN-CNQN8N6LOHJ"),1001000);

        //发送数据报包
        ds.send(dp);

        //关闭
        ds.close();

    }

UDP接收端的使用步骤

1>创建接收端的Socket对象
	构造方法:
		DatagramSocket(int port)//指定端口号
			创建数据报套接字并将其绑定到本地主机上的指定端口
2>创建接收端的数据报包
	通过构造方法:
		public DatagramPacket(byte[] buf,int length)
			构造数据报包对象,用来接收长度为length的数据报包,
			buf:缓冲区大小,一般为1024的倍数
3>通过DatagramSocket类中的方法receive方法接收数据报包
	public void receive(DatagramPacket p) throws IOException
		从此套接字接收数据报包
4>然后通过DatagramPacket类中的方法解析数据报包中的数据
	byte[] getData()//获取数据缓冲区的数据
	int getLength()..获取缓冲区数据的长度
5>还原数据
	String s = new String(bytes,0,length)//还原为字符串数据
6>输出数据
	通过DatagramPacket中的getAddress()方法获取接收到的数据报包的IP地址
		InetAddress getAddress()
	然后通过InetAddress类中的getHostAddress()获取IP地址的字符串表示
	通过输出语句输出相应的数据报包地址和数据报包中的内容
7>关闭
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Receive {
    public static void main(String[] args) throws IOException {

        //创建Socket对象
        DatagramSocket ds = new DatagramSocket(10010) ;

        //创建接收端数据报包
        byte[] bytes = new byte[1024] ;
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);

        //接收数据报包
        ds.receive(dp);

        //解析数据报包中的数据
        byte[] bytes1 = dp.getData() ;
        int length1 = bytes1.length ;

        //还原数据
        String str = new String(bytes1,0,length1) ;

        //输出接收数据报包地址
        String strF = dp.getAddress().getHostAddress() ;

        //打印地址及数据
        System.out.println(strF+"--"+str);

    }
}

标签:总结,DatagramPacket,java,String,报包,day33,学习,new,public
来源: https://blog.csdn.net/p1027544483/article/details/114273120