ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day33_学习总结

2021-03-01 22:33:49  阅读:152  来源: 互联网

标签:总结 DatagramPacket java String 报包 day33 学习 new public


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有