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