공부/java2014. 9. 23. 21:38


이번 예제에서는 ByteArrayInputStream 클래스에 대하여 알아 보겠습니다. ByteArrayInputStream 클래스는 스트림으로 부터 읽은 바이트를 내부 버퍼에 보관 유지합니다. 그리고 내부 카운터에 의해 read() 메소드로 읽혀지는 바이트를 추적합니다.

ByteArrayInputStream 클래스는 바이트 입력 스트림을 표현하는 모든 클래스의 슈퍼 클래스인 추상 클래스 InputStream 을 확장(extends) 합니다.

ByteArrayInputStream 클래스는 JDK 1.0 부터 존재 했습니다.

ByteArrayInputStream 클래스의 구조

생성자

  • ByteArrayInputStream(byte[] buf)

- 인자로 넘어온 buf 바이트 배열을 사용하는 ByteArrayInputStream 인스턴스를 생성합니다.

  • ByteArrayInputStream(byte[] buf, int offset, int length)

- 인자로 넘어온 buf 바이트 배열을 사용하는 ByteArrayInputStream 인스턴스를 생상하며 인스턴스 초기화시 내부 필드인 pos 는 인자값중 offset 을 할당하고 초기화시 내부 필드인 count 는 offset + length 와 인자값인 buf 의 크기중 최소값으로 설정 됩니다. 버퍼 배열은 복사되지 않습니다. 버퍼의 마크는 지정된 offset 으로 설정됩니다.

ByteArrayInputStream read() 예제

간단한 기본 사용법을 보여주는 예제를 보겠습니다.

package kr.co.leehana.example.bytearrayinputstream;

import java.io.ByteArrayInputStream;
import java.util.Random;

public class ByteArrayInputStreamSimpleExample1 {

	public static void main(String[] args) {
		byte[] buffer = new byte[10];
		Random rnd = new Random();

		for (int i = 0; i < buffer.length; i++) {
			buffer[i] = (byte) rnd.nextInt();
		}

		ByteArrayInputStream b = new ByteArrayInputStream(buffer);

		System.out.println("All the elements in the buffer:");

		int num;
		while ((num = b.read()) != -1) {
			System.out.print(num + " ");
		}
	}
}

위 예제에서 Random 클래스를 이용하여 임의의 숫자를 생성하고 이것을 이용하여 byte 배열을 생성하였습니다. ByteArrayInputStream 클래스에 앞에서 만든 byte 배열을 인자값으로 넘겨 인스턴스를 생성하였습니다. 그리고 난 후 모든 버퍼로부터 숫자들을 read() 메소드를 이용하여 출력하였습니다.

참고로 확인할 내용은 close() 메소드를 호출 하지 않았다는 것입니다. 이것은 close() 메소드를 호출해도 아무일도 일어나지 않기 때문입니다.

ByteArrayInputStream read(byte[]b, int off, int len) 예제

위의 예제에서는 read() 메소드를 이용하여 출력을 하였습니다. 그러나 같은 이름으로 된 인자값만 다른 read(byte[] b, int off, int len) 메소드가 존재합니다. 이 메소드는 off 로부터 len 만큼 바이트 배열로부터 읽습니다.

예제를 살펴 보겠습니다.

package kr.co.leehana.example.bytearrayinputstream;

import java.io.ByteArrayInputStream;

public class ByteArrayInputStreamSimpleExample2 {

	public static void main(String[] args) {
		byte[] buf = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
		ByteArrayInputStream b = new ByteArrayInputStream(buf);

		byte[] newBuffer = new byte[6];
		int num = b.read(newBuffer, 2, 4);

		System.out.println("Bytes read: " + num);

		for (int i = 0; i < newBuffer.length; i++) {
			int nr = (int) newBuffer[i];
			if (newBuffer[i] == 0)
				System.out.print("-null- ");
			else
				System.out.print(nr + " ");
		}
	}
}

위 예제에서 b.read(newBuffer, 2, 4) 를 썻습니다. 이 메소드를 호출할때 넘긴 인자값들은 ByteArrayInputStream 의 인스턴스인 b 로부터 4개의 요소로를 읽어 새로운 바이트 배열인 newBuffer 에 2번째(off) 인덱스부터 4개의(len) 요소를 읽어 대입합니다. 이렇게 해서 newBuffer 바이트 배열의 첫번째와 두번째에 왜 null 값이 들어가는지를 알수 있습니다.

예제를 실행하면 아래와 같은 결과가 출력됩니다.

Bytes read: 4
-null- -null- 1 2 3 4

ByteArrayInputStream 사용자 입력 예제

아래의 예제는 사용자로 부터 입력을 받아 대문자로 출력하는 간단한 예제 입니다.

package kr.co.leehana.example.bytearrayinputstream;

import java.io.ByteArrayInputStream;
import java.util.Scanner;

public class ByteArrayInputStreamCapitalizerExample {

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);

		System.out.print("Enter a string: ");
		String message = stdIn.nextLine();
		StringBuilder sb = new StringBuilder();

		ByteArrayInputStream str = new ByteArrayInputStream(message.getBytes());

		int ch;
		while ((ch = str.read()) != -1) {
			sb.append(Character.toUpperCase((char) ch));
		}
		System.out.println("Your capitalized message: " + sb.toString());
	}
}

위 예제는 입력받은 문자열로 부터 byte 배열을 가지고와서 ByteArrayInputStream 인스턴스를 이용해 모든 byte 를 출력합니다.

예제를 실행하면 아래와 같은 결과가 출력됩니다.

Enter a string: Hello World Java Code Geeks!
Your capitalized message: HELLO WORLD JAVA CODE GEEKS!



예제 소스

출처


'공부 > java' 카테고리의 다른 글

Java BufferedInputStream 예제  (0) 2014.09.23
Java List remove object 예제  (0) 2014.09.23
java.lang.System 예제  (0) 2014.09.22
Java BufferedOutputStream 예제  (0) 2014.09.22
Java BufferedWriter 예제  (0) 2014.09.06
Posted by #HanaLee
공부/java2014. 9. 23. 18:49


이번 예제에서는 BufferedInputStream 클래스에 대해 알아보겠습니다. BufferedInputStream 클래스는 입력을 버퍼에 추가 하는 기능과 mark() 메소드와 reset() 메소드가 추가 되어있습니다.

BufferedInputStream 클래스는 InputStream 클래스의 모든 메소드를 오버라이드 하는 FilterInputStream 클래스를 확장합니다.

BufferedInputStream 클래스는 JDK 1.0 부터 존재 해왔습니다.

BufferedInputStream 클래스의 생성자 기본 구조

생성자

  • BufferedInputStream(InputStream in)

- 인자값으로 넘어온 입력 스트림을 나중에 사용하기 위해 저장하는 BufferedInputStream 인스턴스를 만듭니다.

  • BufferedInputStream(InputStream in, int size)

- 지정된 크기를 가지는 BufferedInputStream 인스턴스를 만들어 인자로 넘어온 입력 스트림을 나중에 사용하기 위해 저장합니다.

BufferedInputStream 간단 예제

BufferedInputStream 클래스의 기본 사용법을 보여줍니다.

package kr.co.leehana.example.bufferedinputstream;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamSimpleExample {

	public static void main(String[] args) {
		BufferedInputStream input = null;
		try {
			input = new BufferedInputStream(new FileInputStream("test.txt"));
			StringBuilder sb = new StringBuilder();
			while (input.available() > 0) {
				sb.append((char) input.read());
			}

			System.out.println("read this :");
			System.out.println(sb.toString());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (input != null) {
				try {
					input.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

이 예제에서는 텍스트 파일을 읽어 파일안에 있는 텍스트를 콘솔에 출력 합니다. 파일의 내용을 읽기 위해 입력 스트림으로 FileInputStream 클래스를 이용하여 BufferedInputStream 인스턴스를 생성하였습니다. 그리고 StringBuilder 클래스에 char 형의 데이터 타입으로 추가 해주고 마지막에 스트링타입으로 출력 하였습니다.

마지막에는 잊지말고 BufferedInputStream 인스턴스를 close() 메소드를 호출하여 닫아 주어야 합니다.

BufferedInputStream 추가 예제

이번 예제는 web 서비스로부터 응답된 내용을 출력하는 것을 보여드립니다. 이 예제를 위해 간단한 HttpClient 클래스를 먼저 만들겠습니다.

package kr.co.leehana.example.bufferedinputstream;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class SimpleHttpClient {

	private URL baseurl;

	public SimpleHttpClient(String baseurl) throws MalformedURLException {
		this.baseurl = new URL(baseurl);
	}

	public SimpleHttpClient(URL url) {
		this.baseurl = url;
	}

	public String get(String route) throws IOException {
		StringBuilder sb = new StringBuilder();
		String base = this.baseurl.getHost();
		URL u = new URL("http://" + base + route);
		URLConnection conn = u.openConnection();
		BufferedInputStream in = new BufferedInputStream(conn.getInputStream());

		while (in.available() > 0) {
			sb.append((char) in.read());
		}

		return sb.toString();
	}
}

위 클래스는 간단한 HTTP 클라이언트 입니다. get() 메소드를 호출 하여 웹서비스로 부터 결과를 스트링 타입으로 반환합니다.

아래는 HTTP 클라이언트 클래스를 이용하는 예제 입니다.

package kr.co.leehana.example.bufferedinputstream;

import java.io.IOException;

public class BufferedInputStreamWebExample {

	public static void main(String[] args) {
		try {
			SimpleHttpClient client = new SimpleHttpClient("http://httpbin.org");
			String myIp = client.get("/ip");
			System.out.println(myIp);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

예제에서는 간단한 웹서비스인 http://httpbin.org/ 사이트를 이용하였습니다. HTTP client 의 get() 메소드를 호출하게되면 현재 내 컴퓨터의 IP 주소를 JSON 타입으로 반환을 받게 됩니다. 이렇게 반환된 문자열은 JSON 을 다룰 수 있는 어떤 라이브러리든 이용하여 활용 할 수 있을것입니다.

{
  "origin": "223.62.190.39"
}

BufferedInputStream 추가 정보

BufferedInputStream 클래스는 인스턴스가 만들어질때 내부에 버퍼링 배열을 만듭니다. 스트림의 바이트가 입력되면 스트림으로부터 필요에 따라 한번에 다수의 바이트가 내부 버퍼에 추가 됩니다. 그리고 mark() 메소드는 입력 스트림의 특정 위치를 기억합니다. reset() 메소드는 입력 스트림의 마지막 mark 된 위치로 재설정 됩니다.




예제

출처


'공부 > java' 카테고리의 다른 글

Java ByteArrayInputStream 예제  (0) 2014.09.23
Java List remove object 예제  (0) 2014.09.23
java.lang.System 예제  (0) 2014.09.22
Java BufferedOutputStream 예제  (0) 2014.09.22
Java BufferedWriter 예제  (0) 2014.09.06
Posted by #HanaLee
공부/java2014. 9. 23. 16:59


이번 예제에서는 java.util.List 인터페이스에 있는 두가지 메소드인 E remove(int index)boolean remove(Object o) 에 대해 알아 보겠습니다. 

  • E remove(int index)

- list 내의 지정된 인덱스 위치에 있는 object 를 제거합니다.

  • boolean remove(Object o)

- 지정된 object 가 list 내에 존재하면 존재하는 첫번째 항목을 제거합니다.

- 이 메소드는 list 내에 존재하는 object 들과 equals() 메소드로 비교하여 제거 합니다.

두가지 메소드에 대한 예제를 살펴보겠습니다.

먼저 두 예제에서 공통으로 사용할 User 클래스 입니다.

User 클래스

package kr.co.leehana.example.listremove;

public class User {
	private String firstname;
	private String lastname;

	public User(String firstname, String lastname) {
		this.firstname = firstname;
		this.lastname = lastname;
	}

	@Override
	public String toString() {
		return "User [firstname=" + firstname + ", lastname=" + lastname + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((firstname == null) ? 0 : firstname.hashCode());
		result = prime * result
				+ ((lastname == null) ? 0 : lastname.hashCode());
		return result;
	}

	// firstname 과 lastname 이 같을때에만 동일하다고 판단.
	// 이클립스에서 자동으로 생성해주는 방법을 사용.
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (firstname == null) {
			if (other.firstname != null)
				return false;
		} else if (!firstname.equals(other.firstname))
			return false;
		if (lastname == null) {
			if (other.lastname != null)
				return false;
		} else if (!lastname.equals(other.lastname))
			return false;
		return true;
	}
}

E remove(int index)

package kr.co.leehana.example.listremove;

import java.util.ArrayList;
import java.util.List;

public class ListRemoveIndexExample {

	public static void main(String[] args) {
		List strList = new ArrayList();
		strList.add("one");
		strList.add("two");
		strList.add("three");

		for (String str : strList)
			System.out.println(str);

		strList.remove(1); // two 제거
		System.out.println("## String 리스트에서 1번째 인덱스의 object 를 제거 한 뒤 ###");

		for (String str : strList)
			System.out.println(str);
		
		System.out.println();

		List userList = new ArrayList();
		userList.add(new User("Tom", "Hawk"));
		userList.add(new User("홍", "길동"));
		userList.add(new User("Michael", "Jordan"));

		for (User user : userList)
			System.out.println(user);

		userList.remove(0);

		System.out.println("### User 리스트로부터 0번째 인덱스의 object 를 제거 한 뒤 ###");
		for (User user : userList)
			System.out.println(user);
	}
}

boolean remove(Object o)

package kr.co.leehana.example.listremove;

import java.util.ArrayList;
import java.util.List;

public class ListRemoveObjectExample {

	public static void main(String[] args) {
		List strList = new ArrayList();
		strList.add("one");
		strList.add("two");
		strList.add("three");

		for (String str : strList)
			System.out.println(str);

		strList.remove("two"); // two 제거
		System.out.println("## String 리스트에서 two object 를 제거 한 뒤 ###");

		for (String str : strList)
			System.out.println(str);

		System.out.println();

		List userList = new ArrayList();
		userList.add(new User("Tom", "Hawk"));
		userList.add(new User("홍", "길동"));
		userList.add(new User("Michael", "Jordan"));

		for (User user : userList)
			System.out.println(user);

		userList.remove(new User("홍", "길동"));

		System.out.println("### User 리스트로부터 홍길동 object 를 제거 한 뒤 ###");
		for (User user : userList)
			System.out.println(user);

	}
}

위 예제에서는 User object 를 ArrayList 에 넘겨 해당하는 object 를 삭제 하였습니다. 이 예제에서 주목해야 할 중요한 점은 List 의 remove(Object o) 메소드가 제대로 동작하게 만들기 위해 User 클래스에서 equals() 메소드를 오버라이드 했다는 점입니다.





예제

출처


'공부 > java' 카테고리의 다른 글

Java ByteArrayInputStream 예제  (0) 2014.09.23
Java BufferedInputStream 예제  (0) 2014.09.23
java.lang.System 예제  (0) 2014.09.22
Java BufferedOutputStream 예제  (0) 2014.09.22
Java BufferedWriter 예제  (0) 2014.09.06
Posted by #HanaLee