티스토리 뷰

Programming

[Java] 정리

noonsong 2018. 6. 13. 14:53


1. Java 기본형 데이터 타입


Java data type 에는 기본형 (Primative) 와 참조형 (Reference) 이 있다. 

기본형은 boolean, char, byte, short, int, long, float, double와 같이 계산을 할 수 있는 타입이며,

참조형은 기본형을 제외한 나머지 타입으로 java.lang.Object 를 상속받는다.String, Array,Class 등이 참조형 데이터타입이다.


Java에서 기본형데이터 타입은 반드시 사용하기 전에 declare 되어야한다.


2. ClassLoader 와 GC(garbage collection)


ClassLoader

클래스 로더는 Java의 클래스파일을 로드하는데 사용된다.

Java로 쓰여진 코드는 javac 컴파일러 를 사용하여 class 파일로 컴파일 되며, JVM 이 class 파일의 바이트 코드를 사용하여 execution 된다.

클래스 로더는 파일시스템에서 class 파일을 파일시스템 혹은 네트워크 등에서 불러와 JVM Execution Engine 이 사용할 수 있도록 Runtime Data Area에 Load 하는 부분을 담당한다. 


GC

Java는 C나 C++와 달리 개발자가 프로그램 코드로 메모리를 명시적으로 해제할 수 없도록 한다. 

대신, JVM 의 GC(Garbage Collector) 가 더이상 사용되지 않는 객체를 찾아 메모리 힙에서 지우는 작업을 한다. 


GC가 작동하고 있더라도 더이상 사용가능한 메모리가 없을때 계속 메모리를 할당하려고 하면, OutOfMemorry 에러가 발생하게된다.


GC 알고리즘은 아래 4가지가 있다.

개발자는 성능을 향상시키기 위하여 / 혹은 성능 테스트를 위하여 4개의 GC 방식을 개발한 서버에 적용 시킬 수 있다. 


1. Serial Collector - Young & Old 영역이 연속적으로 처리되며, 하나의 CPU 를 사용. 콜렉션이 수행될 때 어플리케이션 수행이 정지됨 (Stop-the world) - Modern JVM 에서 사용되지 않음

2. Parallel Collector (throughput collector) - Young 영역에서의 collection 을 parrallel 하게 처리함

3. Parallel Compacting Collector - Young 영역에서 처리는 2 와 동일. Old 영역에서 처리 시 다른 알고리즘 사용. 여러 CPU 사용 시 적합

4. CMS Collector (low-tenancy collector) - heap메모리 영역이 클 때 적합. 2개 이상의 프로세서 사용하는 서버에 적용 적합



3. I/O Class/Interface 정리



1)InputStream / OutputStream


InputStream / OutputStream 은 데이터를 Byte 기반으로 처리한다.

int read() 메소드 - 읽어온 데이터의 byte 를 리턴. end of stream 에 -1을 리턴한다. 한 바이트씩 읽는다
int data = inputstream.read();

int read(byte[] b) : 데이터를 byte[] 배열에 저장하여 b만큼 읽어온다.


void write(int) : int 만큼 byte 에 저장


void write(byte[] b) : b 만큼 가져와서 b배열에 저장


void write(byte[] b, int off, int len) : off부터 len 개를 b배열에 저장


예제 - 웹에서 파일 읽어와서 저장

import java.io.*;
import java.net.*;

public class FileCopy1 {

 public static void main(String[] args) throws Exception{
  
  String path = "http://www.penfo.co.kr/bbs/data/free/emma201thumb.jpg";

  URL url = new URL(path);
  InputStream fin = url.openStream();
  System.out.println(fin.getClass().getName());
  
  OutputStream fos = new FileOutputStream("copy.jpg");
  
  while(true){
   int data = fin.read(); 
   if(data == -1){
    System.out.println("파일 끝났음");
    break;
   }
   fos.write(data);   
  }
  fin.close();
  fos.close();
 }

}



2. FileInputStream /FileOutputStream

//FileInput/OutputStream test InputStream fin = new FileInputStream("C:\\Users\\Downloads\\test.txt"); OutputStream fos = new FileOutputStream("C:\\Users\\Downloads\\test_output.txt"); byte[] buffer = new byte[1024]; while(true){ int count = fin.read(buffer); System.out.println("COUNT : " + count); if(count == -1){ System.out.println("DONE!"); break; } fos.write(buffer, 0, count); } fin.close(); fos.close(); }


3. Java IO - Reader / Writer 


4. BufferReader / BufferWriter


문자 입력 스트림으로부터 문자를 읽어 들이거나 문자 출력 스트림으로 문자를 내보낼 때 버퍼링을 함으로써 문자, 문자 배열, 문자열 라인 등을 보다 효율적으로 처리할 수 있도록 해준다.


InputStreamReader / OutputStreamReader 에 비하여 효율적으로 입출력이가능하다 - 버퍼에 미리 데이터를 가져놓기 때문 

FileInputStream 으로 test.txt 의 text 를 복사하여 test_output.txt 에 붙여넣은후 저장 


BufferInputStream / BufferOutput stream 과 차이는 stream- 은 byte 단위, bufferwriter/reader 는 char 단위로 처리한다는것.



예제2 - text File 읽어서 출력

public class IOPractice {

    public static void main(String[] args) throws IOException {
        //  InputStream inputstream = new FileInputStream("C:\\Users\\212560227\\Downloads\\test.txt");
        File inFile = new File("C:\\Users\\212560227\\Downloads\\test.txt");
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(inFile));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(br != null) try {br.close(); } catch (IOException e) {}
        }

    
    }
}





출처: http://hyeonstorage.tistory.com/249 [개발이 하고 싶어요]

http://tutorials.jenkov.com/java-io/index.html

https://stackoverflow.com/questions/32175221/what-is-the-relation-between-inputstream-buffreredinputstream-inputstreamreade

http://tutorials.jenkov.com/java-io/fileinputstream.html




'Programming' 카테고리의 다른 글

[Java] HashMap  (1) 2018.11.04
Maven 용어정리  (0) 2018.06.13
[Java] 정규식  (0) 2018.06.12
[Java 문제풀이] LinkedList, removeDuplicate  (0) 2018.05.20
[Java 문제풀이] Binary Numbers  (0) 2018.04.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함