자바 스트림 종류

JAVA/자바 2015. 10. 29. 23:15

I/O 입출력 클래스의 종류


JAVA의 I/O는 java.io 패키지에 클래스가 정의되어 있는 경우가 대부분이다. (최근에는 nio 등이 나왔다.)


JAVA의 초기에는 입출력 클래스도 단순하였다. 단순히 바이트 단위의 입출력만 지원했지만, 현재는 계속적으로 확장되며 문자 단위의 입출력 뿐만 아니라 다양한 기능을 지원하는 클래스들이 생겨났다.


1. I/O 클래스의 이름과 의미


Stream으로 끝나는 클래스 : 바이트 단위로 입출력을 수행하는 클래스

Reader / Writer로 끝나는 클래스 : 캐릭터 단위로 입출력을 수행하는 클래스

File로 시작하는 클래스 : 하드디스크의 파일을 사용하는 클래스

Data로 시작하는 클래스 : 자바의 원시 자료형을 출력하기 위한 클래스

Buffered로 시작하는 클래스 : 시스템의 버퍼를 사용하는 클래스


1차 스트림 : 입/출력 통로를 직접 만드는 클래스

2차 스트림 : 기존의 통로를 이용하여 새로운 기능을 더하는 클래스



2. InputStream / OutputStream (바이트 입출력)



(1) InputStream


 클래스

설 명 

 Stream

InputStream 

 바이트 입력 스트림을 위한 추상 클래스 

2차 Stream 

FileInputStream

 파일에서 바이트를 읽어들여 바이트 스트림으로 변환 

1차 Stream 

PipedInputStream 

 PipedOutputStream에서 읽어들임 

1차 Stream

FilterInputStream 

 필터 적용(filtered) 바이트 입력을 위한 추상 클래스 

2차 Stream

LineNumberInputStream 

 바이트 입력시 라인 번호를 유지 (비추천)

2차 Stream

DataInputStream 

 기본 자료형 데이터를 바이트로 입력

2차 Stream

BufferedInputStream 

 바이트 버퍼 입력

2차 Stream

PushbackInputStream 

 읽어들인 바이트를 되돌림 (pushback) 

2차 Stream

ByteArrayInputStream 

 바이트 배열에서 읽어들임 

1차 Stream

SequenceInputStream

 t서로 다른 InputStream을 입력받은 순서대로 이어줌

2차 Stream

StringBufferInputStream 

 문자열에서 읽어들임 (비추천)

1차 Stream

ObjectInputStream 

 객체로 직렬화된 데이터를 역직렬화 하여 읽는다. 

2차 Stream


(2) OutputStream


 클래스

설 명 

 Stream

OutputStream 

 바이트 출력 스트림을 위한 추상 클래스 

2차 Stream 

FileOutputStream

 바이트 스트림을 바이트 파일로 변환 

1차 Stream 

PipedOutputStream 

 PipedOutputStream에 출력

1차 Stream

FilterOutputStream 

 필터 적용(filiterd) 바이트 출력을 위한 추상 클래스 

2차 Stream

DataOutputStream 

 바이트를 기본자료형으로 출력

2차 Stream

BufferedOutputStream 

 바이트 스트림에 버퍼 출력

2차 Stream

PrintStream

 Stream 값과 객체를 프린트

2차 Stream

ByteArrayOutputStream 

 바이트 스트림에 바이트 배열 출력

1차 Stream

ObjectputStream 

 데이터를 객체로 직렬화 하여 출력

2차 Stream



3. Reader / Writer (문자 입출력)


* 문자 입출력에는 문자 Encoding이 관여된다.


(1) Reader


 클래스

설 명 

 Stream

Reader

 바이트 입력 스트림을 위한 추상 클래스 

2차 Stream 

 BufferedReader

 문자 버퍼 입력, 라인 해석 

 2차 Stream

 LineNumberReader

 문자 입력시 라인 번호를 유지 

 2차 Stream

 CharArrayReader

 문자 배열에서 읽어들임 

 1차 Stream

 InputStreamReader

 바이트 스트림을 문자 스트림으로 변환 

 2차 Stream

 FileReader

 파일에서 바이트를 읽어들여 문자 스트림으로 변환 

 1차 Stream

 FilterReader

 필터 적용(filtered) 문자 입력을 위한 추상 클래스 

 2차 Stream

 PushbackReader

 읽어들인 문자를 되돌림 (pushback) 

 2차 Stream

 PipedReader

 PipedWriter에서 읽어들임 

 1차 Stream

 StringReader

 문자열에서 읽어들임 

 1차 Stream


(2) Writer


 클래스

설 명 

 Stream

Writer

 문자 출력 스트림을 위한 추상 클래스

 2차 Stream

BufferedWriter

 문자 스트림에 버퍼 출력, 줄바꿈 사용

 2차 Stream

CharArrayWriter 

 문자 스트림에 문자배열 출력 

 1차 Stream

OutputStreamWriter 

 문자 스트림을 바이트 스트림으로 변환 

 2차 Stream

FileWriter

 문자 스트림을 바이트 파일로 변환

 1차 Stream

FilterWriter 

 필터 적용(filtered) 문자 출력을 위한 추상 클래스 

 2차 Stream

PipedWriter 

 PipedReader에 출력 

 1차 Stream

StringWriter 

 문자열 출력 

 1차 Stream

PrintWriter 

 Writer 값과 객체를 프린트 

 2차 Stream



4. 그외의 java.io 클래스


클래스

설 명 

console 

명령행에서 쉽게 입력을 받고, 정형화된 출력을 명령행에 쉽게 출력할 수 있다. 

File

파일 객체를 생성한다. 

FileDescriptor 

물리적 파일에 대한 현재의 연결을 나타내기 위한 클래스

FilePermission 

파일 및 디렉토리에 액세스접 권한을 관리하는 클래스

RandomAccessFile 

랜덤 액세스 파일로부터 읽기와 쓰기가 동시에 이루어질 수 있다.

SerializablePermission

직렬화 가능 액세스 권한을 위한 클래스

StreamTokenizer

입력 스트림을 인수에 취해, 그것을 [토큰]에 구문 분석 해, 한 번에 1개 토큰을 읽는다. 



출처http://hyeonstorage.tistory.com/250

'JAVA > 자바' 카테고리의 다른 글

자바 ARC4 암호화  (0) 2015.11.21
자바 멀티파트  (0) 2015.11.02
자바 이미지파일 전송 클라이언트쪽  (0) 2015.10.29
자바 이미지파일 전송 서버쪽  (0) 2015.10.29
자바 tess4j import 하기  (0) 2015.10.27
블로그 이미지

왕왕왕왕

,

// 소켓 생성

Socket socket = new Socket(dstAddress, dstPort);

// 데이터 전송용 스트림 생성

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

System.out.println("파일 전송 작업을 시작합니다.");


// 파일 이름 전송

// String fName = "작업용a.txt";

// String fName = "피티a.ppt";

// String fName = "작업용a.jpg";

String fName = "작업용a.png";

dos.writeUTF(fName);

System.out.printf("파일 이름(%s)을 전송하였습니다.\n", fName);


// 파일 내용을 읽으면서 전송

BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(bitmapToByteArray(b)));


int len;

int size = 4096;

byte[] data = new byte[size];

while ((len = bis.read(data)) != -1) {

dos.write(data, 0, len);

}


dos.flush();

dos.close();

bis.close();

System.out.println("파일 전송 작업을 완료하였습니다.");

System.out.println("보낸 파일의 사이즈 : " + bitmapToByteArray(b).length);

'JAVA > 자바' 카테고리의 다른 글

자바 멀티파트  (0) 2015.11.02
자바 스트림 종류  (0) 2015.10.29
자바 이미지파일 전송 서버쪽  (0) 2015.10.29
자바 tess4j import 하기  (0) 2015.10.27
자바 OCR 오픈소스 tess4j  (0) 2015.10.27
블로그 이미지

왕왕왕왕

,


System.out.println("from " + socket.getInetAddress() + ":" + socket.getPort());


try {

System.out.println("파일 수신 작업을 시작합니다.");

DataInputStream dis = new DataInputStream(socket.getInputStream());


// 파일명을 전송 받고 파일명 수정.

String fName = dis.readUTF();

System.out.println("파일명 " + fName + "을 전송받았습니다.");


// 파일을 생성하고 파일에 대한 출력 스트림 생성


BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:/save/to.jpg"));

System.out.println(fName + "파일을 생성하였습니다.");


// 바이트 데이터를 전송받으면서 기록

ArrayList<Byte> b = new ArrayList<>();

int sum = 0;

int len;

int size = 4096;

byte[] data = new byte[size];


while ((len = dis.read(data)) != -1) {

bos.write(data, 0, len);

sum += len;

}

System.out.println(data + " " + len+" "+sum);


bos.flush();

bos.close();

dis.close();

System.out.println("파일 수신 작업을 완료하였습니다.");

System.out.println("받은 파일의 사이즈 : " + sum);



'JAVA > 자바' 카테고리의 다른 글

자바 스트림 종류  (0) 2015.10.29
자바 이미지파일 전송 클라이언트쪽  (0) 2015.10.29
자바 tess4j import 하기  (0) 2015.10.27
자바 OCR 오픈소스 tess4j  (0) 2015.10.27
자바 특정 경로 안에 파일목록 출력  (0) 2015.10.24
블로그 이미지

왕왕왕왕

,


비트맵을 바이트로

public byte[] bitmapToByteArray( Bitmap $bitmap ) {  

        ByteArrayOutputStream stream = new ByteArrayOutputStream() ;  

        $bitmap.compress( CompressFormat.JPEG, 100, stream) ;  

        byte[] byteArray = stream.toByteArray() ;  

        return byteArray ;  

    }  



바이트를 비트맵으로

public Bitmap byteArrayToBitmap( byte[] $byteArray ) {  

Bitmap bitmap = BitmapFactory.decodeByteArray( $byteArray, 0, $byteArray.length ) ;  

    return bitmap ;  

}  

블로그 이미지

왕왕왕왕

,


갤러리 리스트뷰 열기


private int REQ_PICK_CODE=100;


onClick에다가 작성


Intent pickerIntent = new Intent(Intent.ACTION_PICK);

pickerIntent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);

pickerIntent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);


startActivityForResult(pickerIntent, REQ_PICK_CODE);



갤러리 선택한 사진 가져오기


  protected void onActivityResult(int requestCode, int resultCode, Intent data) { 


 if (resultCode == RESULT_OK) { if (requestCode == REQ_PICK_CODE) {


 ImageView im = (ImageView)findViewById(R.id.image); 


 try { 


 Bitmap bm = Images.Media.getBitmap(getContentResolver(), data.getData());

 im.setImageBitmap(bm);


 }

 catch (FileNotFoundException e) {

 // TODO Auto-generated catch block e.printStackTrace(); } 

catch (IOException e) { 

 // TODO Auto-generated catch block e.printStackTrace(); }

 }

 }

 super.onActivityResult(requestCode, resultCode, data);

 };



갤러리가져올경우 스토리지 권한문제로 못가져올수있다.


   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

블로그 이미지

왕왕왕왕

,


MainActivity.class

Intent intent = new Intent(MainActivity.this, Aresult.class);

intent.putExtra("file", "abc.png");

startActivityForResult(intent, 1);


1. MainActivity 클래스에서 Aresult 클래스로 file이란 이름으로 abc.png를 넘겨준다.



Aresult.class

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_aresult);

// 현재 활성화된 액티비티를 시작하게 한 인텐트 호출

        Intent intent = getIntent();

    Toast.makeText(getApplicationContext(), intent.getStringExtra("file"),  

         Toast.LENGTH_LONG).show();

        intent.putExtra("re", "return");

        setResult(RESULT_OK,intent);

        finish();

}


1.Aresult클래스에서 file값을 받는다

2.메세지로 받은 파일이름 띄우준다.

3.다시 re란 이름으로 return이란 글자를 리턴해준다.



MainActivity.class

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK) // 액티비티가 정상적으로 종료되었을 경우

{

if (requestCode == 1) // requestCode==1 로 호출한 경우에만 처리.

{

edtTest.setText(data.getStringExtra("re"));

}

}

}

1. startActivityForResult(intent, 1); 여기에 1로 호출한 경우만 

2. edtTest에 re이름으로 반환된 데이터를 찍어준다.


안드로이드 딥빡

블로그 이미지

왕왕왕왕

,

public class MyService extends Service{

@Override

public int onStartCommand(Intent intent, int flags, int startId){

// 다른 컴포넌트가 startService()를 호출해서 서비스가 시작되면 이 메소드가 호출됩니다. 만약 연결된 타입의 서비스를 구현한다면 이 메소드는 재정의 할 필요가 없습니다. 

}


@Override

public IBinder onBind(Intent intent){

// 다른 컴포넌트가 bindService()를 호출해서 서비스와 연결을 시도하면 이 메소드가 호출됩니다. 이 메소드에서 IBinder를 반환해서 서비스와 컴포넌트가 통신하는데 사용하는 인터페이스를 제공해야 합니다. 만약 시작 타입의 서비스를 구현한다면 null을 반환하면 됩니다.

}


@Override

public void onCreate(){

// 서비스가 처음으로 생성되면 호출됩니다. 이 메소드 안에서 초기의 설정 작업을 하면되고 서비스가 이미 실행중이면 이 메소드는 호출되지 않습니다.

}


@Override

public void onDestroy(){

// 서비스가 소멸되는 도중에 이 메소드가 호출되며 주로 Thread, Listener, BroadcastReceiver와 같은 자원들을 정리하는데 사용하면 됩니다. TaskKiller에 의해 서비스가 강제종료될 경우에는 이 메소드가 호출되지 않는다는 점 !! ㅜㅜ

}

}

블로그 이미지

왕왕왕왕

,

 

    private boolean isActivityTop(){

    ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

        List<RunningTaskInfo> info;

        info = activityManager.getRunningTasks(1);

        if(info.get(0).topActivity.getClassName().equals(MainActivity.this.getClass().getName())) {

             return true;

        } else {

             return false;

        }

    }



요긴하게쓸거같다

블로그 이미지

왕왕왕왕

,