java网口通信_JAVA自学笔记(9)——网络通信、函数式接口

TCP通信

1.0 客户端的实现

da755308a6bd0aadab7362954ede0f33.png

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 服务器代码实现

ad72666c28c13abcfa2a87856ba24341.png

08a100f4a3ef86fea1740b332dd36bd9.png

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通信的综合案例(上传文件从客户端到服务器,并且存储到服务器的硬盘中)

客户端实现

1cc009b2d51e510ce4c884f03f26fb34.png

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

}

}

469e5b471ac353df2ff8fb55ad3bdad9.png

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

}

}

692d2fd3179552c54728fd1251fe343f.png

函数式接口

1.0 概念

7e9d49853e1b10fdb8558f294acd775c.png

2.0利用Lambda表达式的执行延迟(接口作为方法的参数传递)

优化日志的案例(输入编号,输出字符串拼接后的字符串 先字符串拼接后执行 所以可能会浪费资源)

09cfd0814765be30f311d8cd16c6b922.png

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 接口作为方法的返回值传递

数组排序案例

import java.lang.reflect.Array;

import java.util.Arrays;

import java.util.Comparator;

public class Main{

public static Comparator getCompare()

{

return new Comparator() {

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

}

}

打印结果:

[jimin,25, jin,27, v,25]

常用的函数式接口

1.0 Supplier接口

adf0d4f20ef54e55285375c5cc64a881.png

练习 找出数组中的最大值 并打印

import java.util.function.Supplier;

public class Main{

public static int getMax(Supplier 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接口

61c23666014049ce903939a7811e8956.png

import java.util.function.Consumer;

public class Main {

public static void conSume(String name, Consumer 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 con1,Consumer 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接口

基本使用

65b3245d194b45f0bd4648df5579c6e6.png

import java.util.function.Predicate;

public class Main{

public static void CheckString(String s, Predicate 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

2f2a09e9117e7c830cbeba4168af97e9.png

import java.util.function.Predicate;

public class Main{

public static void checkString(String s, Predicate pre1,Predicate 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

ea775b8b5c58ba761215df237c51a64a.png

默认方法 negate

e126a000c5908d6b7965ba339551338f.png

4.0 Function接口

练习将String->Integer+10   Integer->String

import java.util.function.Function;

public class Main{

public static void Method(String s, Function fun1,Function 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+"";

});

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值