1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 * Socket.getInputStream():从TCP连接读取数据 提供额外附加功能的FilterInputStream * 如果要给FileInputStream添加缓冲功能: BufferedFileInputStream extends FileInputStream * 如果要给Fi…
1.序列化 序列化是指把一个Java对象变成二进制内容byte[] 序列化后可以把byte[]保存到文件中 序列化后可以把byte[]通过网络传输 一个Java对象要能序列化,必须实现Serializable接口: * Serializable接口没有定义任何方法 * 空接口被称为标记接口(Marker Interface) ObjectOutputStream负责把一个Java对象写入二进制流: try(ObjectOutputStream output = new ObjectOutputS…
1.ZipInputStream是一种FilterInputStream 可以直接读取zip的内容 InputStream->FilterInputStream->InflateInputStream->ZipInputStream->JarInputStream JarInputStream使用ZipInputStream派生出来的,可以直接读取jar文件的MANIFEST.MF文件 ZipInputStream的基本用法: try(ZipInputStream zip = ne…
1.从classpath读取文件可以避免不同环境下文件路径不一致的问题. Windows和Linux关于路径的表示不一致 Windows:C:\conf\default.properties Linux:/User/admin/conf/default.properties //先获取getClass(),再通过getResourceAsStream可以获取任意的资源文件 try(InputStream input = getClass().getResourceAsStream("/defau…
1.java.io.Writer和java.io.OutputStream的区别 OutputStream Writer 字节流,以byte为单位 字符流,以char为单位 写入字节(0-255):void write(int b) 写入字符(0-65535):void write(int c) 写入字节数组 void write(byte[] b) 写入字符数组void wirlte(char[] c) void write(byte[] b, int off, int len) void w…
1.java.io.Reader和java.io.InputStream的区别 InputStream Reader 字节流,以byte为单位 字符流,以char为单位 读取字节(-1,0-255):int read() 读取字符,(-1,0-65535):int read() 读到字节数组:int read(byte[] b) 读到字符数组:int read(char[] c) int read(byte[] b, int off, int len) int read(char[] c, in…
1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络. Socket/TCP/部分IP都是由操作系统提供的.不同的编程语言只是提供了对操作系统调用的加单封装,例如Java提供的几个Socket相关的类就封装了操作系统提供的接口. 为什么需要Socket? 因为仅仅通过IP地址进行通信还不够,同一台计算机同一时间会运行多个网络程序.当计算机收…
1.HTTP协议: Hyper Text Transfer Protocol:超文本传输协议 基于TCP协议之上的请求/响应协议 目前使用最广泛的高级协议 * 使用浏览器浏览网页和服务器交互使用的就是HTTP协议 * 手机应用上绝大多数程序与服务器之间交互数据使用的也是HTTP协议. HTTP协议是一个纯文本协议 HTTP是一个请求/响应协议.浏览器发送一个请求,服务器收到以后,然后发送响应. HTTP 1.0: 每次请求都会创建一个新的HTTP连接,浏览器在请求一个网页之后,往往还是多次请求图…
1. UDP编程: 不需要建立连接 可以直接发送和接收数据 1.1 客户端 DatagramSocket sock = new DatagramSocket(){} sock.connect(addr,9090);//并不建立连接 //接收 byte[] data=...; DatagramPacket packet = new DatagramPacket(data, data.length); sock.send(packet); //发送 byte[] buffer = new byte[…
TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通常使用一个无限for循环,在这个for循环内部,每次调用accept方法,返回一个与远程客户新建的Socket连接,紧接着启动一个新的线程,来处理这个连接. ServerSocket ss = new ServerSocket(port); for( ; ; ){ Socket sock = ss.…