From 551ac9b1bdbd62a209d01079706ba5bbca37282f Mon Sep 17 00:00:00 2001 From: lensferno Date: Wed, 4 Jan 2023 11:53:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=91=8A=E4=B8=89=E8=BF=98=E6=B2=A1?= =?UTF-8?q?=E5=86=99=E5=AE=8C=EF=BC=8C=E5=85=88=E5=AD=98=E4=B8=AA=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 33 ++++ exp1-oop/pom.xml | 20 +++ .../java/net/lensfrex/AbstractExtends.java | 30 ++++ .../src/main/java/net/lensfrex/Interface.java | 26 +++ exp1-oop/src/main/java/net/lensfrex/Main.java | 51 ++++++ .../src/main/java/net/lensfrex/Rectangle.java | 33 ++++ exp2-thread/pom.xml | 20 +++ .../src/main/java/net/lensfrex/Main.java | 42 +++++ .../java/net/lensfrex/RabbitAndTortoise.java | 42 +++++ .../src/main/java/net/lensfrex/Ticket.java | 40 +++++ exp3-network/pom.xml | 32 ++++ .../src/main/java/net/lensfrex/Main.java | 54 ++++++ .../main/java/net/lensfrex/socket/Client.java | 15 ++ .../java/net/lensfrex/socket/Constant.java | 15 ++ .../main/java/net/lensfrex/socket/Data.java | 7 + .../java/net/lensfrex/socket/DataPack.java | 27 +++ .../java/net/lensfrex/socket/MessageData.java | 32 ++++ .../java/net/lensfrex/socket/Request.java | 5 + .../java/net/lensfrex/socket/RequestBody.java | 6 + .../main/java/net/lensfrex/socket/Server.java | 158 ++++++++++++++++++ .../main/java/net/lensfrex/socket/User.java | 13 ++ .../main/java/net/lensfrex/socket/Util.java | 69 ++++++++ pom.xml | 23 +++ src/main/java/net/lensfrex/Main.java | 7 + 24 files changed, 800 insertions(+) create mode 100644 .gitignore create mode 100644 exp1-oop/pom.xml create mode 100644 exp1-oop/src/main/java/net/lensfrex/AbstractExtends.java create mode 100644 exp1-oop/src/main/java/net/lensfrex/Interface.java create mode 100644 exp1-oop/src/main/java/net/lensfrex/Main.java create mode 100644 exp1-oop/src/main/java/net/lensfrex/Rectangle.java create mode 100644 exp2-thread/pom.xml create mode 100644 exp2-thread/src/main/java/net/lensfrex/Main.java create mode 100644 exp2-thread/src/main/java/net/lensfrex/RabbitAndTortoise.java create mode 100644 exp2-thread/src/main/java/net/lensfrex/Ticket.java create mode 100644 exp3-network/pom.xml create mode 100644 exp3-network/src/main/java/net/lensfrex/Main.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/Client.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/Constant.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/Data.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/DataPack.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/MessageData.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/Request.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/RequestBody.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/Server.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/User.java create mode 100644 exp3-network/src/main/java/net/lensfrex/socket/Util.java create mode 100644 pom.xml create mode 100644 src/main/java/net/lensfrex/Main.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7bc4bf7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/exp1-oop/pom.xml b/exp1-oop/pom.xml new file mode 100644 index 0000000..ddbc550 --- /dev/null +++ b/exp1-oop/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + net.lensfrex + lesson + 1.0-SNAPSHOT + + + exp1-oop + + + 8 + 8 + UTF-8 + + + \ No newline at end of file diff --git a/exp1-oop/src/main/java/net/lensfrex/AbstractExtends.java b/exp1-oop/src/main/java/net/lensfrex/AbstractExtends.java new file mode 100644 index 0000000..b69b5b3 --- /dev/null +++ b/exp1-oop/src/main/java/net/lensfrex/AbstractExtends.java @@ -0,0 +1,30 @@ +package net.lensfrex; + +public class AbstractExtends { + protected void run() { + Father father = new Child(); + + father.method1(); + father.method2(); + } +} + +// ------------------------------------------ +abstract class Father { + public abstract void method1(); + + public abstract void method2(); +} + +// ------------------------------------------- +class Child extends Father { + @Override + public void method1() { + System.out.println("Do some thing in method1"); + } + + @Override + public void method2() { + System.out.println("Do some thing in method2"); + } +} \ No newline at end of file diff --git a/exp1-oop/src/main/java/net/lensfrex/Interface.java b/exp1-oop/src/main/java/net/lensfrex/Interface.java new file mode 100644 index 0000000..c2a1a27 --- /dev/null +++ b/exp1-oop/src/main/java/net/lensfrex/Interface.java @@ -0,0 +1,26 @@ +package net.lensfrex; + +public class Interface { + protected void run() { + AnInterface anInterface = new AnInterface() { + @Override + public void method1() { + System.out.println("Do some thing in method1"); + } + + @Override + public void method2() { + System.out.println("Do some thing in method2"); + } + }; + + anInterface.method1(); + anInterface.method2(); + } +} + +interface AnInterface { + void method1(); + + void method2(); +} \ No newline at end of file diff --git a/exp1-oop/src/main/java/net/lensfrex/Main.java b/exp1-oop/src/main/java/net/lensfrex/Main.java new file mode 100644 index 0000000..d4887ef --- /dev/null +++ b/exp1-oop/src/main/java/net/lensfrex/Main.java @@ -0,0 +1,51 @@ +package net.lensfrex; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Main { + public static void main(String[] args) throws Exception { + if (args.length > 0) { + execute(args[0]); + } else { + System.out.println("Witch to run? (1, 2, 3)"); + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + + execute(reader.readLine()); + } + } + + private static void execute(String option) { + Main main = new Main(); + + switch (option) { + case "1": + main.run1(); + break; + case "2": + main.run2(); + break; + case "3": + main.run3(); + break; + default: + System.out.printf("Invalid input for '%s'%n", option); + } + } + + private void run1() { + Rectangle rectangle = new Rectangle(3, 4); + + System.out.println("rectangleHeight: " + rectangle.getHeight()); + System.out.println("rectangleWidth: " + rectangle.getWidth()); + System.out.println("rectangleSize: " + rectangle.getSize()); + } + + private void run2() { + new Interface().run(); + } + + private void run3() { + new AbstractExtends().run(); + } +} \ No newline at end of file diff --git a/exp1-oop/src/main/java/net/lensfrex/Rectangle.java b/exp1-oop/src/main/java/net/lensfrex/Rectangle.java new file mode 100644 index 0000000..70f271b --- /dev/null +++ b/exp1-oop/src/main/java/net/lensfrex/Rectangle.java @@ -0,0 +1,33 @@ +package net.lensfrex; + +public class Rectangle { + private float height = 0; + private float width = 0; + + public Rectangle() {} + + public Rectangle(float height, float width) { + this.height = height; + this.width = width; + } + + public float getSize() { + return height * width; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + } + + public float getWidth() { + return width; + } + + public void setWidth(float width) { + this.width = width; + } +} diff --git a/exp2-thread/pom.xml b/exp2-thread/pom.xml new file mode 100644 index 0000000..beedaf0 --- /dev/null +++ b/exp2-thread/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + net.lensfrex + lesson + 1.0-SNAPSHOT + + + exp2-thread + + + 8 + 8 + UTF-8 + + + \ No newline at end of file diff --git a/exp2-thread/src/main/java/net/lensfrex/Main.java b/exp2-thread/src/main/java/net/lensfrex/Main.java new file mode 100644 index 0000000..f9d0cd6 --- /dev/null +++ b/exp2-thread/src/main/java/net/lensfrex/Main.java @@ -0,0 +1,42 @@ +package net.lensfrex; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Main { + public static void main(String[] args) throws Exception { + System.out.println("Thread Lesson report"); + + if (args.length > 0) { + execute(args[0]); + } else { + System.out.println("Witch to run? (1, 2)"); + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + + execute(reader.readLine()); + } + } + + private static void execute(String option) { + Main main = new Main(); + + switch (option) { + case "1": + main.run1(); + break; + case "2": + main.run2(); + break; + default: + System.out.printf("Invalid input for '%s'%n", option); + } + } + + private void run1() { + new RabbitAndTortoise().runTest(); + } + + private void run2() { + new Ticket().runTest(); + } +} \ No newline at end of file diff --git a/exp2-thread/src/main/java/net/lensfrex/RabbitAndTortoise.java b/exp2-thread/src/main/java/net/lensfrex/RabbitAndTortoise.java new file mode 100644 index 0000000..24b7a07 --- /dev/null +++ b/exp2-thread/src/main/java/net/lensfrex/RabbitAndTortoise.java @@ -0,0 +1,42 @@ +package net.lensfrex; + +public class RabbitAndTortoise { + public void runTest() { + Animal rabbit = new Animal("Rabbit", 16, 32); + Animal tortoise = new Animal("Tortoise", 8, 32); + + new Thread(rabbit).start(); + new Thread(tortoise).start(); + } +} + +class Animal implements Runnable { + private final String name; + + private final int speed; + private final int targetDistance; + + private int totalDistance = 0; + + public Animal(String name, int speed, int targetDistance) { + this.name = name; + this.speed = speed; + this.targetDistance = targetDistance; + } + + @Override + public void run() { + while (totalDistance <= targetDistance) { + try { + Thread.sleep((int) (Math.random() * 1000) + 500); + } catch (Exception ignored) { + return; + } + + totalDistance += speed; + System.out.printf("[%s] has run %d%n", name, totalDistance); + } + + System.out.printf("[%s] has finish the game.%n", name); + } +} diff --git a/exp2-thread/src/main/java/net/lensfrex/Ticket.java b/exp2-thread/src/main/java/net/lensfrex/Ticket.java new file mode 100644 index 0000000..ef6a7ce --- /dev/null +++ b/exp2-thread/src/main/java/net/lensfrex/Ticket.java @@ -0,0 +1,40 @@ +package net.lensfrex; + +public class Ticket { + public void runTest() { + TicketOffice ticketOffice = new TicketOffice(); + new Thread(ticketOffice, "0").start(); + new Thread(ticketOffice, "1").start(); + new Thread(ticketOffice, "2").start(); + } +} + +class TicketOffice implements Runnable { + private static int ticket = 8; + + @Override + public void run() { + String name = Thread.currentThread().getName(); + while(sellTicket(name)); + } + + private boolean sellTicket(String name) { + synchronized (this) { + if (ticket <= 0) { + System.out.printf("[%s]: Ticket was sold out.%n", name); + return false; + } + + System.out.printf("TicketOffice '%s' is selling ticket No.%s%n", name, ticket); + ticket--; + + try { + Thread.sleep(128); + } catch (Exception ignored) { + return false; + } + } + + return true; + } +} diff --git a/exp3-network/pom.xml b/exp3-network/pom.xml new file mode 100644 index 0000000..5a73c1a --- /dev/null +++ b/exp3-network/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + net.lensfrex + lesson + 1.0-SNAPSHOT + + + exp3-network + + + 8 + 8 + UTF-8 + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 9 + 9 + + + + + + \ No newline at end of file diff --git a/exp3-network/src/main/java/net/lensfrex/Main.java b/exp3-network/src/main/java/net/lensfrex/Main.java new file mode 100644 index 0000000..af071a6 --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/Main.java @@ -0,0 +1,54 @@ +package net.lensfrex; + +import javafx.application.Application; +import net.lensfrex.socket.Client; +import net.lensfrex.socket.Server; +import net.lensfrex.socket.Util; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Main { + public static void main(String[] args) throws Exception { + System.out.println("Thread Lesson report"); + + if (args.length > 0) { + execute(args[0]); + } else { + System.out.println("Witch to run? (1server, 1client, 2)"); + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + + execute(reader.readLine()); + } + } + + private static void execute(String option) { + Main main = new Main(); + + switch (option) { + case "1server": + main.run1Server(); + break; + case "1client": + main.run1Client(); + break; + case "2": + main.run2(); + break; + default: + System.out.printf("Invalid input for '%s'%n", option); + } + } + + private void run1Server() { + new Server().start(); + } + + private void run1Client() { + new Client().start(); + } + + private void run2() { + System.out.println(Util.randomString(128)); + } +} \ No newline at end of file diff --git a/exp3-network/src/main/java/net/lensfrex/socket/Client.java b/exp3-network/src/main/java/net/lensfrex/socket/Client.java new file mode 100644 index 0000000..58d7b3d --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/Client.java @@ -0,0 +1,15 @@ +package net.lensfrex.socket; + +import javafx.application.Application; +import javafx.stage.Stage; + +public class Client extends Application { + public void start() { + launch(); + } + + @Override + public void start(Stage primaryStage) throws Exception { + + } +} diff --git a/exp3-network/src/main/java/net/lensfrex/socket/Constant.java b/exp3-network/src/main/java/net/lensfrex/socket/Constant.java new file mode 100644 index 0000000..4dd09d4 --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/Constant.java @@ -0,0 +1,15 @@ +package net.lensfrex.socket; + +import java.nio.charset.StandardCharsets; + +public class Constant { + public static final byte[] MAGIC_HEADER = "AETH".getBytes(StandardCharsets.UTF_8); + + public static final int OPCODE_LENGTH = 4; + public static final byte[] OPCODE_REQUEST_MESSAGE = "RMSG".getBytes(StandardCharsets.UTF_8); + public static final byte[] OPCODE_SEND_MESSAGE = "SMSG".getBytes(StandardCharsets.UTF_8); + public static final byte[] OPCODE_ONLINE = "ONLI".getBytes(StandardCharsets.UTF_8); + public static final byte[] OPCODE_OFFLINE = "OFFL".getBytes(StandardCharsets.UTF_8); + + public static final byte[] MESSAGE_OK = "OK".getBytes(StandardCharsets.UTF_8); +} diff --git a/exp3-network/src/main/java/net/lensfrex/socket/Data.java b/exp3-network/src/main/java/net/lensfrex/socket/Data.java new file mode 100644 index 0000000..4c8dec3 --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/Data.java @@ -0,0 +1,7 @@ +package net.lensfrex.socket; + +import java.io.Serializable; + +public class Data implements Serializable { +// private final byte[] data +} diff --git a/exp3-network/src/main/java/net/lensfrex/socket/DataPack.java b/exp3-network/src/main/java/net/lensfrex/socket/DataPack.java new file mode 100644 index 0000000..521789b --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/DataPack.java @@ -0,0 +1,27 @@ +package net.lensfrex.socket; + +import java.io.Serializable; + +public class DataPack implements Serializable { + private final byte[] opcode; + private final int dataLength; + private final byte[] data; + + public DataPack(byte[] opcode, byte[] data) { + this.opcode = opcode; + this.dataLength = data.length; + this.data = data; + } + + public byte[] getOpcode() { + return opcode; + } + + public int getDataLength() { + return dataLength; + } + + public byte[] getData() { + return data; + } +} diff --git a/exp3-network/src/main/java/net/lensfrex/socket/MessageData.java b/exp3-network/src/main/java/net/lensfrex/socket/MessageData.java new file mode 100644 index 0000000..77a041b --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/MessageData.java @@ -0,0 +1,32 @@ +package net.lensfrex.socket; + +public class MessageData { + private final int idLength; + private final byte[] idData; + + private final int messageLength; + private final byte[] messageData; + + public MessageData(int idLength, byte[] idData, int messageLength, byte[] messageData) { + this.idLength = idLength; + this.idData = idData; + this.messageLength = messageLength; + this.messageData = messageData; + } + + public int getIdLength() { + return idLength; + } + + public byte[] getIdData() { + return idData; + } + + public int getMessageLength() { + return messageLength; + } + + public byte[] getMessageData() { + return messageData; + } +} diff --git a/exp3-network/src/main/java/net/lensfrex/socket/Request.java b/exp3-network/src/main/java/net/lensfrex/socket/Request.java new file mode 100644 index 0000000..9c161e1 --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/Request.java @@ -0,0 +1,5 @@ +package net.lensfrex.socket; + +public class Request { + +} diff --git a/exp3-network/src/main/java/net/lensfrex/socket/RequestBody.java b/exp3-network/src/main/java/net/lensfrex/socket/RequestBody.java new file mode 100644 index 0000000..cf27713 --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/RequestBody.java @@ -0,0 +1,6 @@ +package net.lensfrex.socket; + +import java.io.Serializable; + +public class RequestBody implements Serializable { +} diff --git a/exp3-network/src/main/java/net/lensfrex/socket/Server.java b/exp3-network/src/main/java/net/lensfrex/socket/Server.java new file mode 100644 index 0000000..783b4c3 --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/Server.java @@ -0,0 +1,158 @@ +package net.lensfrex.socket; + +import java.io.*; +import java.net.ServerSocket; +import java.net.Socket; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.HashSet; + +public class Server { + private static boolean stop = false; + + public void start() { + Server.stop = false; + + try (ServerSocket serverSocket = new ServerSocket(2333)) { + while (!stop) { + // Start a new thread to service more than one client + new ServerThread(serverSocket.accept()).start(); + } + } catch (Exception e) { + System.err.println("Some exception happened: " + e); + } + } + + public void stop() { + Server.stop = true; + } +} + +class ServerThread extends Thread { + private static final HashSet onlineUsers = new HashSet(); + + private final Socket socket; + + public ServerThread(Socket socket) { + this.socket = socket; + } + + @Override + public void run() { + try (InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream()) { + byte[] clientMagicHeader = new byte[Constant.MAGIC_HEADER.length]; + if (inputStream.read(clientMagicHeader) == -1) { + return; + } + + if (!Arrays.equals(clientMagicHeader, Constant.MAGIC_HEADER)) { + return; + } + + byte[] clientOpcode = new byte[Constant.OPCODE_LENGTH]; + if (inputStream.read(clientOpcode) == -1) { + return; + } + + int dataLength = getLengthField(inputStream); + if (dataLength == -1) { + return; + } + + this.executeAction(clientOpcode, dataLength, inputStream, outputStream); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private void executeAction(byte[] opcode, int dataLength, InputStream inputStream, OutputStream outputStream) throws IOException { + byte[] data = this.readRequest(dataLength, inputStream); + + if (Arrays.equals(Constant.OPCODE_ONLINE, opcode)) { + this.login(new String(data)); + this.sendResponse(Constant.MESSAGE_OK, outputStream); + } else if (Arrays.equals(Constant.OPCODE_OFFLINE, opcode)) { + this.logout(new String(data)); + } else if (Arrays.equals(Constant.OPCODE_REQUEST_MESSAGE, opcode)) { + + } + } + + private void login(String id) { + User user = new User(id); + onlineUsers.add(user); + + System.out.printf("User '%s' login.%n", user.getId()); + } + + private void logout(String id) { + User user = new User(id); + onlineUsers.add(user); + System.out.printf("User '%s' logout.%n", user.getId()); + } + + private void + + private int sendMessage(User user, OutputStream outputStream) throws IOException { + if (!onlineUsers.contains(user)) { + + } + + int responseLength = this.sendResponse(Util.randomString(128), outputStream); + + return responseLength; + } + + private int getLengthField(InputStream inputStream) throws IOException { + byte[] tmp = new byte[4]; + if (inputStream.read(tmp) == -1) { + return -1; + } + + return Util.bytesToInt32(tmp); + } + + private void receiveMessage(DataPack dataPack) { + byte[] data = dataPack.getData(); + + User user = new User(); + + String message = new String(data); + System.out.printf("Receive message '%s' from: '%s'%n", user.getId(), message); + System.out.println("----------------"); + } + + private DataPack readRequest(InputStream inputStream) throws IOException { + byte[] clientOpcode = new byte[Constant.OPCODE_LENGTH]; + if (inputStream.read(clientOpcode) == -1) { + return null; + } + + int dataLength = this.getLengthField(inputStream); + + byte[] data = new byte[dataLength]; + inputStream.read(data); + + return new DataPack(clientOpcode, data); + } + + private int sendResponse(String message, OutputStream outputStream) throws IOException { + return this.sendResponse(message.getBytes(StandardCharsets.UTF_8), outputStream); + } + + private int sendResponse(byte[] data, OutputStream outputStream) throws IOException { + DataPack dataPack = new DataPack(Constant.OPCODE_SEND_MESSAGE, data); + + return this.sendResponse(dataPack, outputStream); + } + + private int sendResponse(DataPack dataPack, OutputStream outputStream) throws IOException { + outputStream.write(Constant.MAGIC_HEADER); + outputStream.write(dataPack.getOpcode()); + + outputStream.write(Util.int32ToBytes(dataPack.getDataLength())); + outputStream.write(dataPack.getData()); + + return dataPack.getDataLength(); + } +} \ No newline at end of file diff --git a/exp3-network/src/main/java/net/lensfrex/socket/User.java b/exp3-network/src/main/java/net/lensfrex/socket/User.java new file mode 100644 index 0000000..c20256c --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/User.java @@ -0,0 +1,13 @@ +package net.lensfrex.socket; + +public class User { + private final String id; + + public User(String id) { + this.id = id; + } + + public String getId() { + return id; + } +} diff --git a/exp3-network/src/main/java/net/lensfrex/socket/Util.java b/exp3-network/src/main/java/net/lensfrex/socket/Util.java new file mode 100644 index 0000000..7935886 --- /dev/null +++ b/exp3-network/src/main/java/net/lensfrex/socket/Util.java @@ -0,0 +1,69 @@ +package net.lensfrex.socket; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Random; + +public class Util { + private static final char[] alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray(); + private static final Random random = new Random(); + + public static String randomString(int length) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + sb.append(alphabet[random.nextInt(alphabet.length)]); + } + + return sb.toString(); + } + + public static int bytesToInt32(byte[] bytes) { + int result = 0; + for (int i = 0; i < 4; i++) { + int shift = (3 - i) * 8; + result += (bytes[i] & 0xFF) << shift; + } + + return result; + } + + public static byte[] int32ToBytes(int i) { + byte[] result = new byte[4]; + result[0] = (byte) ((i >> 24) & 0xFF); + result[1] = (byte) ((i >> 16) & 0xFF); + result[2] = (byte) ((i >> 8) & 0xFF); + result[3] = (byte) (i & 0xFF); + + return result; + } + + public static byte[] readAllData(InputStream inputStream) { + return readAllData(inputStream, 5);// read every 5kb in default + } + + public static byte[] readAllData(InputStream inputStream, int byteAllocation) { +// On Java 9 and newer version, can be more simply: +// try (ByteArrayOutputStream byteArrayInputStream = new ByteArrayOutputStream(); inputStream) { + + try (ByteArrayOutputStream byteArrayInputStream = new ByteArrayOutputStream()) { + byte[] bytes = new byte[1024 * byteAllocation]; + + for (int length; (length = inputStream.read(bytes)) != -1; ) { + byteArrayInputStream.write(bytes, 0, length); + } + + byteArrayInputStream.flush(); + + return byteArrayInputStream.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } finally { + try { + inputStream.close(); + } catch (IOException ignored) { + } + } + } +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6d238f4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + net.lensfrex + lesson + 1.0-SNAPSHOT + pom + + exp1-oop + exp2-thread + exp3-network + + + + 8 + 8 + UTF-8 + + + \ No newline at end of file diff --git a/src/main/java/net/lensfrex/Main.java b/src/main/java/net/lensfrex/Main.java new file mode 100644 index 0000000..2b24e07 --- /dev/null +++ b/src/main/java/net/lensfrex/Main.java @@ -0,0 +1,7 @@ +package net.lensfrex; + +public class Main { + public static void main(String[] args) { + System.out.println("Hello world!"); + } +} \ No newline at end of file