正则表达式及网络编程

一、缓冲流(都是将数据先换冲到内存缓冲区,然后写入磁盘,或者读取到内存)

1、字节缓冲输入流

构造方法:

BufferedInputStream(InputStream in) 通过字节输入流创建 字节输入缓冲流 对象,默认是8KB

2、字节缓冲输出流

①构造方法:

BufferedInputStream(InputStream in) 通过字节输入流创建 字节输入缓冲流对 默认是8KB

只有字节缓冲输出流或者字符缓冲输出流才有flush方法,他们都是先将数据输出到缓冲区,然后flush或者close方法,将数据同步导磁盘

3、字符缓冲输入流

①构造方法:

   BufferedReader(Reader in)    

②BufferedReader缓冲流类还提供了一个一次读取一行的方法:

   String readLine()   (只有这个类提供了这个方法)一次读取一行字符,

如果读取不到字符,则会返回null(这是和read方法的区别),它是以\r    \n    

\r\n来判断是不是一行的,当没有出现这些标志时,他会一直等着,不会结束

4、字符缓冲输出流

①构造方法:

   BufferedWriter(Writer out)

②BufferedWriter特有的方法:

    void newLine() 写入一个换行符。

二、异常处理方式二

java7之后,IO流出现了一种自动关闭流的异常处理。

java7之后所有的IO流都实现了一个接口,该接口叫做  AutoCloseable,

  并且这个异常处理会自动关闭流

  try(

   创建IO流对象,该对象必须实现了AutoCloseable接口

  ){

   可能出现异常的代码

  }catch(异常类型 变量名){

   异常处理

  }catch(异常类型 变量名){

  异常处理

  }catch(异常类型 变量名){

  异常处理

  }

三.打印流

  PrintStream(OutputStream out)   把数据打印到指定的输出流中

四.标准输入流、标准输出流、标准错误流

System类(属于系统类)内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

static PrintStream out “标准”输出流。

    static PrintStream err “标准”错误输出流。 只是将输出的内容标红而已

static InputStream in “标准”输入流。

五、正则表达式(regex

①正则表达式: 简单理解就是一个字符串,只是该字符串它是另外的字符串的匹配规则。

  

   ②作用: 验证其他字符串是否按照正则表达式的规则编写         满足:true, 不满足:返回false

  

   ③常见的正则表达式的规则写法:

   ABC----》验证你的字符串是否就是一个ABC

   [0-9]--->验证你的字符串是否是0-9中任意一位数字         注意:它只能匹配字符串一位

   [A-Z]--->验证你的字符串是否是A-Z中任意一位字符         注意:它只能匹配字符串一位

   [a-z]--->验证你的字符串是否是a-z中任意一位字符         注意:它只能匹配字符串一位

   [a-zA-Z]--->验证你的字符串是否是任意一位英文字母         注意:它只能匹配字符串一位

   [a-zA-Z0-9]--->验证你的字符串是否是任意一位英文字母或者数字  注意:它只能匹配字符串一位

   [ABC]---->验证你的字符串是否是A或者B或者C中的任意一位   注意:它只能匹配字符串一位

  

   \d 表示一个整数

  

   ④Greedy 数量词

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次

⑤预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[ \t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]   判断你的字符串是否是任意字母,任意数字或者_   满足:true  不满足 false

\W 非单词字符:[^\w]

⑥边界匹配器

^ 行的开头

$ 行的结尾

⑦Logical 运算符

XY    X后紧跟 Y

X|Y X 或 Y

六、ip操作

  InetAddress(工具类,方法基本都是static修饰)此类表示互联网协议 (IP) 地址。

  IP 地址是 IP 使用的 32 位(四段)或 128位(八段)无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。

  static InetAddress getLocalHost() 返回本地主机。

    static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。

   static InetAddress[] getAllByName(String host) 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。

    static InetAddress getByAddress(byte[] addr) 在给定原始 IP 地址的情况下,返回 InetAddress 对象。

    static InetAddress getByAddress(String host, byte[] addr)  根据提供的主机名和 IP 地址创建 InetAddress。

    boolean isReachable(int timeout)  测试是否可以达到该地址

七、URL

  平时我们在网上看到的网址,只看到域名并没有看到端口号

   答:http协议浏览器默认的端口号是80   https浏览器默认端口号是443    默认端口号是被省了的

  URL = 协议 + ip地址(域名) +端口号 + 资源路径    为什么要使用域名而不使用IP地址?为了方便记忆

  protocol:协议

  host: ip地址

   port:端口号

   File:资源文件

  构造方法:

   URL(String protocol, String host, int port, String file)

常用方法:

InputStream openStream() 打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream对象。

八、URL的编码和解码

URLencoder是对URL以指定的字符集进行编码;

URLdecoder是对URL以指定的字符集进行解码。

static String encode(String s, String enc)  以指定的字符集进行编码

static String decode(String s, String enc)  以指定的字符集进行解码

一般都是用在,对网址进行编码或者对你查询的参数进行编码,其实一般都是对中文进行编码

九、网络编程

package cn.itsource_o9tcp2;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("192.168.43.59",9999);
        //客户端监听服务端发过来的信息
        InputStream inputStream = socket.getInputStream();
        new ClientThread(inputStream).start();
        //创建打印流(打印流是将数据打印到指定的流中)
        PrintStream printStream = new PrintStream(socket.getOutputStream());
        InputStream in = System.in;
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
        String line;
        while((line = bufferedReader.readLine()) != null){
            printStream.println(line);
        }
        
    }

}
View Code
package cn.itsource_o9tcp2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ClientThread extends Thread{
    private InputStream inputStream;

    public ClientThread(InputStream inputStream) {
        super();
        this.inputStream = inputStream;
    }
    @Override
    public void run() {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        while(true){
            String line;
            try {
                while((line = bufferedReader.readLine()) != null){
                    System.out.println("客户端接收到的数据:="+line);
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}
View Code
package cn.itsource_o9tcp2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //创建一个服务器
        ServerSocket server = new ServerSocket(9999);
        //创建一个终端监听服务器(如果没接收到数据,这儿会发生阻塞)
        Socket socket = server.accept();
        //创建一个终端的字节输入流对象
        InputStream inputStream = socket.getInputStream();
        //创建一个server线程来一直监听终端是否收到信息,一旦收到信息,便执行线程中的内容
        new ServerThread(inputStream).start();
        //通过终端的字节输出流对象创建一个打印流
        PrintStream printStream = new PrintStream(socket.getOutputStream());
        //创建一个标准输入流对象
        InputStream in = System.in;
        //用标准输入流对象创建一个字符输入流对象,//通过字符缓冲输入流进行读取控制台里面输入的内容
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
        String line;
        while((line = bufferedReader.readLine())!=null){
            //读多少,打印流就输出多少
            printStream.println(line);
        }
    }

}
View Code
package cn.itsource_o9tcp2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ServerThread extends Thread{
    //定义一个成员变量来保存InputStream的信息
    private InputStream inputStream;
    //通过构造方法为成员变量赋值
    public ServerThread(InputStream inputStream) {
        this.inputStream = inputStream;
    }
    @Override
    public void run() {
        //用接收到的字节输入流对象经过转换流来创建一个字符缓冲流对象
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        try {
            //因为这个线程要一直监听服务器,因此只能是死循环 
            while(true){
                String line;
                while((line = bufferedReader.readLine()) != null){
                    System.out.println("服务端线程收到的数据:=:"+line);
                }
                
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


}
View Code

猜你喜欢

转载自www.cnblogs.com/limengkun/p/10739310.html