1.0 客戶端的實現java
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class TCPSocket { public static void main(String[] args) throws IOException { Socket socket=new Socket("127.0.0.1",8888); OutputStream stream = socket.getOutputStream(); stream.write("你好服務器".getBytes()); InputStream inputStream = socket.getInputStream(); byte []bytes=new byte[1024]; int read = inputStream.read(bytes); System.out.println(new String(bytes,0,read)); socket.close(); } }
2.0 服務器代碼實現數組
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket=new ServerSocket( 8888 ); Socket socket = serverSocket.accept(); InputStream stream = socket.getInputStream(); byte bytes[]=new byte[1024]; int read = stream.read(bytes); System.out.println(new String(bytes,0,read)); OutputStream outputStream = socket.getOutputStream(); outputStream.write("謝謝收到!".getBytes()); socket.close(); serverSocket.close(); } }
3.0 TCP通訊的綜合案例(上傳文件從客戶端到服務器,而且存儲到服務器的硬盤中)服務器
客戶端實現app
import java.io.*; import java.net.Socket; public class TCPSocket { public static void main(String[] args) throws IOException { FileInputStream fis=new FileInputStream("D:\\photos\\白雪公主.jpg"); Socket socket=new Socket("127.0.0.1",8888); OutputStream outputStream = socket.getOutputStream(); byte []bytes=new byte[1024]; int len=0; while((len=fis.read(bytes))!=-1) { outputStream.write(bytes,0,len); } socket.shutdownOutput(); /* *上傳完文件,給服務器寫一個結束標記 * 禁用此套接字的輸出流 * 對於TCP套接字,任何以前的寫入的數據都將被髮送, * 而且後跟TCP的正常鏈接終止序列 * */ InputStream inputStream = socket.getInputStream(); byte []bytes1=new byte[1024]; int len1=inputStream.read(bytes1); System.out.println(new String(bytes1,0,len1)); socket.close(); fis.close(); } }
import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class TCPServer{ public static void main(String[] args) throws IOException { ServerSocket serverSocket=new ServerSocket(8888); Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); File file=new File("D:\\upload"); if(!file.exists()) { file.mkdirs(); } FileOutputStream fos=new FileOutputStream(file+"\\白雪公主.jpg") ; byte[] bytes=new byte[1024]; int len=0; while((len=inputStream.read(bytes))!=-1) { fos.write(bytes,0,len); } socket.getOutputStream().write("上傳成功!".getBytes()); serverSocket.close(); fos.close(); socket.close(); } }
1.0 概念socket
2.0利用Lambda表達式的執行延遲(接口做爲方法的參數傳遞)ide
優化日誌的案例(輸入編號,輸出字符串拼接後的字符串 先字符串拼接後執行 因此可能會浪費資源)函數
public interface MessageBuilder { public abstract String bulidMessage(); }
public class Main{ public static void main(String[] args) { String msg1="Hello"; String msg2="World"; String msg3="Java"; showlog(1,()->msg1+msg2+msg3 ); } private static void showlog(int grade,MessageBuilder ms) { if(grade==1) { System.out.println(ms.bulidMessage()); } } }
3.0 接口做爲方法的返回值傳遞優化
數組排序案例ui
import java.lang.reflect.Array; import java.util.Arrays; import java.util.Comparator; public class Main{ public static Comparator<String> getCompare() { return new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.length()-o1.length();//長度降序 } }; } public static void main(String[] args) { String arr[]={"jin,27","jimin,25","v,25"}; Arrays.sort(arr,(o1,o2)->o2.length()-o1.length()); System.out.println(Arrays.toString(arr)); } }
打印結果:spa
[jimin,25, jin,27, v,25]
1.0 Supplier接口
練習 找出數組中的最大值 並打印
import java.util.function.Supplier; public class Main{ public static int getMax(Supplier<Integer> sup) { Integer integer = sup.get(); return integer; } public static void main(String[] args) { int Max = getMax(() -> { int arr[] = {34, 234, 52, 5, 65}; int max = arr[0]; for (int i : arr) { if (i > max) max = i; } return max; }); System.out.println(Max);//234 } }
2.0 Consumer接口
import java.util.function.Consumer; public class Main { public static void conSume(String name, Consumer<String> con) { con.accept(name); } public static void main(String[] args) { conSume("金泰亨",(name)->{ System.out.println(name); }); } }
默認方法 andThen
練習 格式化打印信息 格式 姓名:XX,年齡:XX
import java.util.function.Consumer; public class Main { public static void conSume(String []arr, Consumer<String> con1,Consumer<String> con2) { for (String s : arr) { con1.andThen(con2).accept(s); } } public static void main(String[] args) { String arr[]={"Suga,26","Jimin,25","JK,23"}; conSume(arr,(s)->{ String s1 = s.split(",")[0]; System.out.print("姓名:"+s1+","); },(s)->{ String s2 = s.split(",")[1]; System.out.println("年齡:"+s2); }); } }
打印結果:
姓名:Suga,年齡:26
姓名:Jimin,年齡:25
姓名:JK,年齡:23
3.0 predicate接口
基本使用
import java.util.function.Predicate; public class Main{ public static void CheckString(String s, Predicate<String> pre) { System.out.println(pre.test(s));//false } public static void main(String[] args) { String s="abcde"; CheckString(s,(str)->{ return s.length()>5; }); } }
默認方法 and
import java.util.function.Predicate; public class Main{ public static void checkString(String s, Predicate<String> pre1,Predicate<String> pre2) { boolean test = pre1.and(pre2).test(s); System.out.println(test); } public static void main(String[] args) { String s="abcdef"; checkString(s,(str)-> str.length()>5 ,(str)->str.contains("a") ); } }
默認方法 or
默認方法 negate
4.0 Function接口
練習將String->Integer+10 Integer->String
import java.util.function.Function; public class Main{ public static void Method(String s, Function<String,Integer> fun1,Function<Integer,String> fun2) { String apply = fun1.andThen(fun2).apply(s); System.out.println(apply); } public static void main(String[] args) { String s="23"; Method(s,(str)->{ int i = Integer.parseInt(s); return i+10; },(i)->{ return i+""; }); } }