一、缓冲流(都是将数据先换冲到内存缓冲区,然后写入磁盘,或者读取到内存)
1、字节缓冲输入流
构造方法:
BufferedInputStream(InputStream in) 通过字节输入流创建 字节输入缓冲流 对象,默认是8KB
2、字节缓冲输出流
①构造方法:
BufferedInputStream(InputStream in) 通过字节输入流创建 字节输入缓冲流对 象 ,默认是8KB
②只有字节缓冲输出流或者字符缓冲输出流才有flush方法,他们都是先将数据输出到缓冲区,然后flush或者close方法,将数据同步导磁盘
3、字符缓冲输入流
①构造方法:
BufferedReader(Reader in)
②BufferedReader缓冲流类还提供了一个一次读取一行的方法:
String readLine() (只有这个类提供了这个方法)一次读取一行字符,
如果读取不到字符,则会返回null(这是和read方法的区别),它是以
来判断是不是一行的,当没有出现这些标志时,他会一直等着,不会结束
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 空白字符:[ x0Bf ]
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); } } }

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(); } } } }

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); } } }

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(); } } }