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.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.从classpath读取文件可以避免不同环境下文件路径不一致的问题. Windows和Linux关于路径的表示不一致 Windows:C:\conf\default.properties Linux:/User/admin/conf/default.properties //先获取getClass(),再通过getResourceAsStream可以获取任意的资源文件 try(InputStream input = getClass().getResourceAsStream("/defau…
1.ZipInputStream是一种FilterInputStream 可以直接读取zip的内容 InputStream->FilterInputStream->InflateInputStream->ZipInputStream->JarInputStream JarInputStream使用ZipInputStream派生出来的,可以直接读取jar文件的MANIFEST.MF文件 ZipInputStream的基本用法: try(ZipInputStream zip = ne…
1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络. Socket/TCP/部分IP都是由操作系统提供的.不同的编程语言只是提供了对操作系统调用的加单封装,例如Java提供的几个Socket相关的类就封装了操作系统提供的接口. 为什么需要Socket? 因为仅仅通过IP地址进行通信还不够,同一台计算机同一时间会运行多个网络程序.当计算机收…
TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通常使用一个无限for循环,在这个for循环内部,每次调用accept方法,返回一个与远程客户新建的Socket连接,紧接着启动一个新的线程,来处理这个连接. ServerSocket ss = new ServerSocket(port); for( ; ; ){ Socket sock = ss.…
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[…
1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract void run(); } public class Student extends Person{ @Override public void run(){} } public class Teacher extends Person{ @Override public void run(){}…