*towSumLec 코드 다시짜보기(강사님 towSum이라고 썼으면서ㅠㅠtwoSum이었어) Algorithm
*FileSystem과 Main코드 분석하기 -> kosta.io(도스)
-클라이언트 프로그램(client program) : 연결을 요청하는 통신 프로그램
-서버 프로그램(server program) : 연결 요청을 기다리는 통신 프로그램
-소켓(socket) : 프로그램 내에서 보았을 때의 데이터 통신 출입구
-
서버소켓
-
클라이언트 소켓
클라이언트 소켓 <--> 서버 소켓
ServerSocket serverSocket = new ServerSocket(9000);
Socket socket = serverSocket.accept();
객체를 생성했다 -> 연결을 요청했다.
InputStream in = socket.getInputStream(); ->소켓에 빨대를 꽂아 데이터값을 소켓에서 쓰는 것과 같다.
out.write(data);
int data = in.read();
socket.close();
server부터 run 그 다음에 client시작
Server소켓-inputstream : outputstream
Client소켓-inputstream : outputstream
하나의 소켓을 Thread로 보내야함.
방을 list로 표현 , list자료구조를 스레드가 사용함
소켓은 스레드화해서 프린트롸이터와 동기화해서 list구현
클라이언트가 ip와 포트로 서버에게 접속이 되어서 하나의 소켓이 생성된다.(accept 소켓반환)
다른소켓으로 부터 데이터값을 읽어들인 것을 다른사람에게 쓰기도 해야해서 쓰레드로 표현
PerClientThread : 소켓을 파라미터로 하나 받아서. 소켓을 스레드화함. 소켓은 방안에 직접 들어가있는 것이 아니라 연결되어 있는 printwriter를 통해서 방에 접한다. 그 소켓을 list자료구조에 넣었다. list자료구조 안에 printWriter가 하나씩 있음. 각 소켓에게 데이터값이 씌어진다.(write)
kosta.net3 : 입력창 출력창 하나임
kosta.net4 : GUI 프로그램이 필요함
람다식
Kosta.lamda
runnable을 구현하면 thread를 사용해야 함.
//runnable 인터페이스 => 람다식 (1~10)출력하자.
Runnable r = () -> {
for(int i=1;i<=10;i++) {
System.out.println(i);
}
};
Thread t = new Thread(r);
t.start();
**JSON
xml vs JSON : 데이터의 공통된 값- 이 기종간에 데이터를 주고받기 위해
json으로 표현하겠다. (데이터 영역이 작음)
JSON은 라이브러리가 많음.
kosta.json
오늘 해야할일 :
-
twosum예제, dos예제 (Algorithm, Kosta.io)
package Algorithm; ->한쌍만 찾고 끝나는것 고쳐야함
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class TowSumLec {//n^2
public static int[] twoSum(int[] nums, int target) {
for(int i=0; i<nums.length;i++) {
for(int j=i+1;j<nums.length;j++) {
if(target == nums[i] + nums[j]) {
return new int[] {i,j};
}
}
}
throw new IllegalArgumentException("No two sum solution");//이문구가 없으면 에러뜸 return값이 없다고 뜹니다.
}
//target : 5
//Hash Table
//key : 6438752
//value : 0123456(key값의 index) ->for문 한번만 돌리면 됨.
public static int[] twoSum2(int[] nums, int target) {
int data[] = {1, 4, 3, 8, 7, 5, 2};
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0; i<nums.length;i++) {
map.put(nums[i], i);
}
for(int i1=0;i1<nums.length;i1++) {
Integer i2 = map.get(target-nums[i1]);
if(i2 != null && i1 != i2)
return new int[] {i1,i2};
}
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args) {
int nums[] = {1, 4, 3, 8, 7, 5, 2};//target 5 => index반환
int result[] = twoSum2(nums,5);
System.out.println(result[0]+", "+result[1]);
}
}
package Kosta.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileSystem {
private File presentDirFile = new File("C:\\");
public void fileListPrint(){
File[] fileList = presentDirFile.listFiles();
for(int i = 0; i < fileList.length; i++){
if(fileList[i].isDirectory()){
System.out.println(fileList[i].getName()+"\t<DIR>");
}else{
System.out.println(fileList[i].getName()+"\t<FILE>");
}
}
}
public void moveDir(String dest){
File[] fileList = presentDirFile.listFiles();
File destFile = new File(presentDirFile, dest);
for(int i = 0; i < fileList.length; i++){
if(fileList[i].getPath().equals(destFile.getPath())){
presentDirFile = destFile;
return;
}
}
System.out.println("해당파일 목록에 존재하지 않음");
}
public void moveSuperDir(){
String presentPath = presentDirFile.getPath();
int presentNameSize = presentDirFile.getName().length();
String superPath = presentPath.substring(0, presentPath.length()-presentNameSize);
presentDirFile = new File(superPath);
}
public void makeDir(String newDirName){
File newDir = new File(presentDirFile, newDirName);
File[] fileList = presentDirFile.listFiles();
for(int i = 0; i < fileList.length; i++){
if(fileList[i].getPath().equals(newDir.getPath())){
System.out.println("똑같은 이름의 파일이 존재 합니다.");
return;
}
}
newDir.mkdir();
}
public void copy(String sorceStr){
if(sorceStr.lastIndexOf("\\") == -1){
return;
}
String destStr = sorceStr.substring(sorceStr.lastIndexOf("\\")+1);
File sourceFile = new File(presentDirFile, sorceStr);
File dest = new File(presentDirFile, destStr);
copyAllFile(sourceFile, dest);
}
public void copyAllFile(File sourceFile, File dest){
if(sourceFile.isFile()){
File destFile = new File(dest, sourceFile.getName());
copyFile(sourceFile, destFile);
return;
}
File[] fileList = sourceFile.listFiles();
dest.mkdir();
for(int i = 0; i < fileList.length; i++){
if(fileList[i].isDirectory()){
File destDir = new File(dest, fileList[i].getName());
copyAllFile(fileList[i], destDir);
}else{
File destFile = new File(dest, fileList[i].getName());
copyFile(fileList[i], destFile);
}
}
}
public void copyFile(File sourceFile, File dest){
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(sourceFile);
fos = new FileOutputStream(dest);
byte[] arrByte = new byte[5000];
while((fis.read(arrByte)) != -1){
fos.write(arrByte);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("해당 파일이 존재하지 않습니다");
}finally {
try {
if(fis != null){
fis.close();
}
if(fos != null){
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public File getPresentDirFile() {
return presentDirFile;
}
public void setPresentDirFile(File presentDirFile) {
this.presentDirFile = presentDirFile;
}
}
package Kosta.io;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// >ls
// => 파일목록 출력
//
// >cd kosta
// =>디렉토리 이동
//
// >cd..
// => 부모디렉토리 이동
//
// >mkdir kosta
// => 새로운 디렉토리 생성
//
// >cp /home/test
// =>현재디렉토리에 /home/test에 있는 모든 파일 복사
FileSystem fileSystem = new FileSystem();
Scanner scanner = new Scanner(System.in);
String moveSuperReg = "^cd(\\p{Space})?\\.\\.$";
String moveDirReg = "^cd\\p{Space}.+$";
String mkdirReg = "^mkdir\\p{Space}.+$";
String cpReg = "^cp\\p{Space}.+$";
while(true){
System.out.print(fileSystem.getPresentDirFile().getPath());
System.out.print(">");
String command = scanner.nextLine().trim();
if(command.equals("ls")){ //파일목록 출력
fileSystem.fileListPrint();
}else if(command.matches(moveSuperReg)){ //부모디렉토리이동
fileSystem.moveSuperDir();
}else if(command.matches(moveDirReg)){
String modifyCommand = command.substring(3);//디렉토리이동
fileSystem.moveDir(modifyCommand);
}else if(command.matches(mkdirReg)){
String modifyCommand = command.substring(6);//새로운 디렉토리 형성
fileSystem.makeDir(modifyCommand);
}else if(command.matches(cpReg)){
String modifyCommand = command.substring(3);//현재디렉토리에 home/test에 있는 모든 파일 복사
fileSystem.copy(modifyCommand);
}else if(command.equals("exit")){
scanner.close();
System.exit(0);
}
System.out.println();
}
}
}
-
람다(Kosta.lamda)
-
네트워킹(Kosta.net&2&3&4)
-
JSON-최신라이브러리(Kosta.json)
json library가져오는법 : JavaProject - Bulid Path -Configure Bulid Path -Libraries-new libraries
package Kosta.json;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class JsonExam {
//JSONObject => json code[문자열]
//{"name" : "홍길동", "address" : "가산동","age" :20}
public JSONObject createJsonObject() {
JSONObject obj = new JSONObject();
obj.put("name", "홍길동");
obj.put("address", "가산동");
obj.put("age",20);
return obj;
}
public JSONObject createJsonObject2() {
JSONObject obj = new JSONObject();
obj.put("name", "박길동");
obj.put("address", "강남");
obj.put("age",10);
return obj;
}
public static void main(String[] args) {
JsonExam e= new JsonExam();
JSONObject obj = e.createJsonObject();
JSONObject obj2 = e.createJsonObject2();
// System.out.println(obj.toJSONString());
JSONArray ja = new JSONArray();
ja.add(obj);
ja.add(obj2);
//JSONArray =>json code
// System.out.println(ja.toJSONString()));
//List<Member> => json code★★
List<Member> list = new ArrayList<Member>();
list.add(new Member("홍길동","가산동",20));
list.add(new Member("박길동","강남",30));
// System.out.println(org.json.simple.JSONArray.fromObject(list).toString());
//jscode ==> Java Object
//{"address":"가산동","name":"홍길동","age":20}
String jsonCode = net.sf.json.JSONArray.fromObject(list).toString();
JSONParser parser = new JSONParser();
Object re = null;
try {
re = parser.parse(jsonCode);
} catch (Exception e2) {
e2.printStackTrace();
}
if(re instanceof JSONArray) {
JSONArray array = (JSONArray)re;
Iterator iter = array.iterator();
List<Member> list2 = new ArrayList<Member>();
while(iter.hasNext()) {
JSONObject jo = (JSONObject)iter.next();
String name = (String)jo.get("name");
String address = (String)jo.get("address");
int age = ((Long)jo.get("age")).intValue();
list2.add(new Member(name, address, age));
}
System.out.println(list2);
}
}
}
'FULLSTACK > JAVA' 카테고리의 다른 글
JAVA 19차시 - (프로젝트)호텔예약시스템 발표, 알고리즘(stack,queue), Tree (0) | 2020.11.13 |
---|---|
JAVA 18차시 - Test , 호텔예약프로그램 (프로젝트) (0) | 2020.11.13 |
JAVA 16차시 - File, Thread (0) | 2020.11.12 |
JAVA 15차시 - 복습, 입출력(3가지 카테고리&파일클래스) (0) | 2020.11.12 |
JAVA 14차시 - 자료구조(list, map,set), 최초정렬(Comparable -> compareTo()), 정렬바꾸기(Comparator -> compare()) (0) | 2020.11.12 |