728x90

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

 

 

kosta.net

kosta.net2

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

 

오늘 해야할일 : 

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

                }

                

                

        }

}

 

  1. 람다(Kosta.lamda)

  2. 네트워킹(Kosta.net&2&3&4)

  1. 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);

                }

        }

}

 

 

 

 

 

 

728x90

+ Recent posts