标签:程序启动 uppercase 提高 mysq amp pack 启动失败 十进制 fun
服务器端: public class TcpServer { public static void main(String[] args) throws IOException { //向系统要一个指定的端口 ServerSocket server = new ServerSocket(8888); System.out.println("开始等待客户连接........"); //获取发送请求的socket对象 Socket s1 = server.accept(); //获取网络字节输入流 InputStream inputStream = s1.getInputStream(); //使用该流读取数据 byte[] bytes = new byte[1024]; int len = inputStream.read(bytes); System.out.println(new String(bytes,0,len)); //获取网络字节输出流 OutputStream outputStream = s1.getOutputStream(); outputStream.write("收到了,谢谢".getBytes()); s1.close(); server.close(); } } 客户端: public class TcpClient { public static void main(String[] args) throws IOException { Socket socket = new Socket("127.0.0.1", 8888); //获取网络字节输出流 OutputStream outputStream = socket.getOutputStream(); //使用该流向服务器发送数据 outputStream.write("你好,服务器".getBytes()); //获取一个网络字节输入流读取服务器发送的数据 InputStream inputStream = socket.getInputStream(); byte[] bytes = new byte[1024]; int len = inputStream.read(bytes); System.out.println(new String(bytes,0,len)); //关闭socket socket.close(); } }
public class TcpServer { public static void main(String[] args) throws IOException { //1.获取一个绑定好指定端口的服务器socket对象 ServerSocket server = new ServerSocket(8888); while (true) { //2.用accept获取到请求的socket客户端 Socket client01 = server.accept(); /* 使用多线程技术,提高程序的效率 有一个客户端上传文件,就开启一个线程,完成文件的上传 */ new Thread(new Runnable() { //完成文件的上传 @Override public void run() { try { //3.获取网络字节输入流对象 InputStream is = client01.getInputStream(); //4.判断文件夹是否存在,不存在就创建一个 File file = new File("D:\\CreatNew"); if (!file.exists()) { file.mkdirs(); } /* 自定义一个文件命名规则,防止覆盖 规则:域名+毫秒值+随机数 */ String filename = "itcast" + System.currentTimeMillis() + new Random().nextInt(99999) + ".jpg"; //5.创建一个本地字节输出流 FileOutputStream fos = new FileOutputStream(file + "\\" + filename); //6.使用网络字节输入流读取数据 byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes)) != -1) { //7.通过本地流写入硬盘 fos.write(bytes, 0, len); } System.out.println("2222222222222"); //8.给客户回数据 OutputStream os = client01.getOutputStream(); os.write("上传成功".getBytes()); //9.释放资源 fos.close(); client01.close(); } catch (IOException e) { System.out.println(e); } } }).start(); } } }
public class TcpClient { public static void main(String[] args) throws IOException { //1.创建本地字节输入流,获取要读取的数据源 FileInputStream fis = new FileInputStream("D:\\Baseball\\cai.jpg"); //2.创建一个socket对象 Socket socket = new Socket("127.0.0.1", 8888); //3.获取网络字节输出流对象 OutputStream os = socket.getOutputStream(); //4.通过本地流读取数据 byte[] bytes = new byte[1024]; int len = 0; while ((len = fis.read(bytes)) != -1) { //5.通过网络流写到服务器上去 os.write(bytes, 0, len); } System.out.println("1111111111"); //发送结束标记 socket.shutdownOutput(); //6.读取服务端返回的数据 InputStream is = socket.getInputStream(); while ((len = is.read()) != -1){ System.out.println(new String(bytes,0,len)); } //7.释放资源 fis.close(); socket.close(); } }
package basicpart.day01.BS.web; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class BSserver { public static void main(String[] args) throws IOException { //1.创建一个服务器 ServerSocket server = new ServerSocket(8888); /* 浏览器解析服务器回写的html页面,页面中如果有图片,那么浏览器就会单独的开启一个线程,读取服务器的图片 我们就让服务器一直处于监听状态,客户端请求一次,服务器就回写一次 */ while (true) { //2.获取请求的客户端对象 Socket socket = server.accept(); new Thread(new Runnable() { @Override public void run() { try { //3.获取网络字节输入流 InputStream is = socket.getInputStream(); //4.把网络字节输入流对象转换为字符缓存输入流 BufferedReader br = new BufferedReader(new InputStreamReader(is)); //5.把客户端请求信息的第一行读取出来 GET /BS/web/index.html HTTP/1.1 String line = br.readLine(); System.out.println(line); //6.把读取的信息进行切割,只要中间的部分BS/web/index.html String[] arr = line.split(" "); //7.再把路径前面的/去掉,进行截取 从第一个字母截取到最后 String htmlpath = arr[1].substring(1); //8.创建一个本地字节输入流,构造方法中绑定要读取的html路径 FileInputStream fis = new FileInputStream("D:\\JA\\Part1-basic\\src\\basicpart\\day01\\" + htmlpath); //9.使用socket的网络字节输出流对象 OutputStream os = socket.getOutputStream(); //写入HTTP协议响应头,固定写法 os.write("HTTP/1.1 200 OK\r\n".getBytes()); os.write("Content-Type:text/html\r\n".getBytes()); //必须要写入空行,否则浏览器不解析 os.write("\r\n".getBytes()); //10.一读一写复制文件,把服务器读取的html文件回写到客户端 int len = 0; byte[] bytes = new byte[1024]; while ((len = fis.read(bytes)) != -1) { os.write(bytes, 0, len); } //释放资源 fis.close(); socket.close(); } catch (IOException e) { System.out.println(e); } } }).start(); } } }
@FunctionalInterface public interface MyFunctionalInterface { void method(); }
public class Demo { public static void show(MyFunctionalInterface myInter){ myInter.method(); } public static void main(String[] args) { //调用show方法,方法的参数是一个接口,所以可以传递接口的实现类 show(new MyFunctionalInterfaceImpl()); //调用show方法,方法的参数是一个接口,所以我们可以传递接口的匿名内部类 show(new MyFunctionalInterface() { @Override public void method() { System.out.println("使用匿名内部类的打印"); } }); //调用show方法,方法的参数是一个函数式接口,所以我们可以传递lambda表达式 //()内为方法的参数 show(()-> System.out.println("lambada表达式打印")); } }
public class DelayLambda { public static void main(String[] args) { String msgA = "hello"; String msgB = "world"; //lambda表达式有延迟执行的功能 //如果等级不为1,则不会执行method方法,不会拼接字符串 showLog(1, () -> msgA + msgB); } public static void showLog(int level, MyFunctionalInterface myInter) { if (level == 1) { myInter.method(); } } }
public class DelayLambda { public static void main(String[] args) { startThread(()-> System.out.println(Thread.currentThread().getName() + "线程启动了")); } public static void startThread(Runnable task){ //开启多线程 new Thread(task).start(); } }
public class DelayLambda { public static void main(String[] args) { String[] arr = {"aaa","b","ccccc"}; //输出排序前的数组 System.out.println(Arrays.toString(arr)); //调用Arrays中的sort方法,对数组进行排序,第二个参数即为getResult方法返回的实现类对象 Arrays.sort(arr,getResult()); //输出排序后的数组 System.out.println(Arrays.toString(arr)); } public static Comparator<String> getResult(){ //方法的返回值类型为接口,可以使用匿名内部类 /*return new Comparator<String>(){ @Override public int compare(String o1, String o2) { //按照字符串的降序 return o2.length()-o1.length(); } };*/ //方法的返回值类型为函数式接口,可以返回lambda表达式 return (o1,o2)->o2.length()-o1.length(); } }
得到想要的数据类型: public class UsualFunction { public static String getString(Supplier<String> sup){ return sup.get(); } public static void main(String[] args) { String s = getString(()-> "胡歌"); //生产一个字符串并返回 System.out.println(s); } } 求出最大值: public class UsualFunction { public static void main(String[] args) { int[] arr = {2,14,33,66,-35}; int maxValue = getMax(()->{ int max = arr[0]; //遍历数组,获取数组中的其他元素 for (int i : arr) { if(i>max){ max = i; } } return max; }); System.out.println(maxValue); } public static int getMax(Supplier<Integer> sup){ return sup.get(); } }
基本使用: public class UsualFunction { public static void main(String[] args) { method("chris",(String name)->{ //将字符串进行反转 String rename = new StringBuilder(name).reverse().toString(); System.out.println(rename); }); } public static void method(String s, Consumer<String> con){ con.accept(s); } }
public class UsualFunction { public static void main(String[] args) { //调用方法,进行两次消费 method("chris",s-> System.out.println(s.toUpperCase()),s-> System.out.println(s.toLowerCase())); } public static void method(String s, Consumer<String> con1, Consumer<String> con2){ con1.andThen(con2).accept(s);//这样就消费了两次 } }
public class UsualFunction { public static void main(String[] args) { String[] nameList = {"古力娜扎,女","胡歌,男","宫海成,男"}; method(nameList,(message)->{ //消费方式:对message进行切割,获取姓名,再按指定的格式输出 String name = message.split(",")[0]; System.out.print("姓名:" + name); },(message)->{ //第二个消费方式,获取年龄 String age = message.split(",")[1]; System.out.println(" 性别:" + age); }); } public static void method(String[] list, Consumer<String> con1, Consumer<String> con2){ //首先遍历数组 for (String message : list) { //使用andThen方法连接两个接口,消费每个信息 con1.andThen(con2).accept(message); } } }
public class InterfaceCheck { public static void main(String[] args) { String a = "abcde"; boolean b = stringCheck(a, (String str) -> { //对参数传递的字符串进行判断 return str.length() > 5; }); } public static boolean stringCheck(String s, Predicate<String> pre){ return pre.test(s); } }
public class InterfaceCheck { public static void main(String[] args) { String a = "abcde"; boolean b = stringCheck(a, (str)->str.length()>4,(str)->str.contains("b")); System.out.println(b); } //传递两个predicate接口,判断是否满足两个条件 public static boolean stringCheck(String s, Predicate<String> pre1,Predicate<String> pre2){ // return pre1.test(s) && pre2.test(s); return pre1.and(pre2).test(s); } }
return pre1.or(pre2).test(s); return pre1.negate().test(s);
public class InterfaceCheck { public static void main(String[] args) { String[] array = {"古力娜扎,女", "胡歌,男", "强巴仁增,男", "赵灵儿,女"}; //使用方法,判断数组中名字长度大于四个,且性别为男的 ArrayList<String> list = infoCheck(array,(String info)->{ String name = info.split(",")[0]; return name.length()>2; },(String info)->{ return info.split(",")[1].equals("女"); }); for (String s : list) { System.out.println(s); } } //传递两个predicate接口,判断是否满足两个条件 public static ArrayList<String> infoCheck(String[] arr, Predicate<String> pre1, Predicate<String> pre2) { //定义一个Arraylist集合,存储过滤后的信息 ArrayList<String> list = new ArrayList<>(); for (String info : arr) { //使用predicate中的test方法对获取到的字符串进行判断 boolean b = pre1.and(pre2).test(info); //对得到的布尔值进行判断 if(b){ //两个条件都满足,就加入到集合中 list.add(info); } } return list; } }
public class DemoFunction { public static void main(String[] args) { String s = "24"; //调用方法将字符串转换为int类型 change(s,(str)->Integer.parseInt(str)); } public static void change(String str, Function<String,Integer> fun){ int in = fun.apply(str); //也可用int接收 自动拆箱 System.out.println(in); } }
public class DemoFunction { public static void main(String[] args) { String s = "24"; //调用方法将字符串转换为int类型再加10,再转换为字符串 change(s, str -> Integer.parseInt(str) + 10, i -> i + ""); } public static void change(String str, Function<String, Integer> fun1, Function<Integer, String> fun2) { String finalstr = fun1.andThen(fun2).apply(str); System.out.println(finalstr); } }
Java进阶 - 网络编程、Socket、函数式接口、常用的函数式接口
标签:程序启动 uppercase 提高 mysq amp pack 启动失败 十进制 fun
原文地址:https://www.cnblogs.com/caixiaowu/p/12885241.html