●자바JSON

- 자바에서 JSON을 만들고 파싱을 해주는 기본 클래스가 없기때문에 라이브러리를 추가해줘야 한다.


- 자바 JSON라이브러리는 여러가지가 있다. 아래 예제는 org.json 라이브러리를 사용했다.

http://mvnrepository.com/artifact/org.json/json






●예제

- text.jsp

<%@page import="org.json.JSONException"%>

<%@page import="org.json.JSONObject"%>

<%@page import="org.json.JSONArray"%>

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%


//JSON만들기

JSONObject jobj = new JSONObject();

try {

jobj.put("이름", "호랑이");

 jobj.put("나이", "10");

 jobj.put("직업", "동물");

} catch (JSONException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

JSONArray maglist = new JSONArray();

maglist.put(jobj);

maglist.put(jobj);

maglist.put(jobj);


JSONObject jobj2 = new JSONObject();

try {

jobj2.put("arr",maglist);

} catch (JSONException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}


System.out.println("jobj:"+jobj);

System.out.println("maglist:"+maglist);

System.out.println("jobj2:"+jobj2);


//JSON 해석하기

JSONObject obj;

try {

obj = new JSONObject(jobj2.toString());


JSONArray array = obj.getJSONArray("arr");

JSONObject dataObj = array.getJSONObject(0);


String friendName = dataObj.getString("이름");

String friendAge = dataObj.getString("나이");

System.out.println("friendName:"+friendName);

System.out.println("friendAge:"+friendAge);

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

%>

 




Posted by -현's-

댓글을 달아 주세요


●자바로 오늘이 무슨 요일인지 구하기


   String[] weekDay = { "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일" };     

   Calendar cal = Calendar.getInstance(); 

      int num = cal.get(Calendar.DAY_OF_WEEK)-1; 

      String today = weekDay[num]; 

      System.out.println(num); 

      System.out.println("오늘의 요일 : " + today ); 



Posted by -현's-

댓글을 달아 주세요



●File 클래스

- 파일과 관련된 정보를 나타내고 제어하는데 주로 사용된다. 파일에 관한 정보를 설정하고 속정을 바꾸는 기능 등을 한다.




- FileEx.java

import java.io.File;


class FileEx

{

public static void main(String[] args){

File f1 = new File("aa.txt");


System.out.println("f1.getPath():"+f1.getPath());

System.out.println("f1.getAbsolutePath():"+f1.getAbsolutePath());

System.out.println("f1.getName():"+f1.getName());

System.out.println("f1.toString():"+f1.toString());


try{

System.out.println("f1.toURL():"+f1.toURL());

}catch(java.net.MalformedURLException e){

System.out.println("f1.toURL():"+e);

}

System.out.println("f1.canRead():"+f1.canRead());

System.out.println("f1.canWrite():"+f1.canWrite());

System.out.println("f1.isAbsolute():"+f1.isAbsolute());

System.out.println("f1.isDirectory():"+f1.isDirectory());

System.out.println("f1.isFile():"+f1.isFile());

System.out.println("f1.isHidden():"+f1.isHidden());

System.out.println("f1.lastModified():"+f1.lastModified());

System.out.println("f1.length():"+f1.length());

System.out.println("f1.exists():"+f1.exists());

}

} 








Posted by -현's-

댓글을 달아 주세요


●문자 스트림(Character Stream)

- 자바 스트림 클래스 중에서 처리할 데이터가 문자인 경우에 사용한다. 문자 스트림은 16bit 유니코드 문자를 주고 받는다. 


Reader

Writer 

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

FileReader

FileWriter 

 파일 입출력을 위한 문자 스트림 클래스

BufferedReader

BufferedWriter 

 입출력 스트림에 버퍼링 기능을 추가해주는 스트림

PrintWriter 

 출력을 위한 동작을 지원하는 문자 스트림

InputStreamReader

OutputStreamWriter

 바이트와 문자 변환을 위한 입출력 스트림







●FileReader, FileWriter 클래스

- 기본 문자 인코딩 방식으로 텍스트 파일을 읽고 쓰기 위해 제공되는 문자 스트림 클래스이다.


-FileReaderWriter

import java.io.*;


public class FileReaderWriter

{

public static void main(String args[]){

try{

FileReader input = new FileReader("a.txt");

FileWriter output = new FileWriter("b.txt");

int a;

while((a=input.read()) != -1){

output.write(a);

}

input.close();

output.close();


}catch(IOException e){

e.printStackTrace();

}

}

} 












●BufferedReader, BufferedWriter 클래스

- 연결된 스트림에 버퍼링 기능을 한다.



BufferedReaderWriter.java

import java.io.*;


public class BufferedReaderWriter

{

public static void main(String []args){

try{

if(args.length<1){

System.out.println("xx");

}

String str;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("str.txt")));


while((str = br.readLine())!=null){

bw.write(str+"\n");

}

br.close();

bw.close();

}catch(IOException e){

e.printStackTrace();

}

}

} 













●InputStreamReader, OutputStreamWriter 클래스

- 바이트와 문자의 변환을 담당하는 클래스이다.




- IOReader.java

import java.io.*;


public class IOReader

{

public static String getString(){

StringBuffer s = new StringBuffer();

Reader reader = new InputStreamReader(System.in);

char ch;

try{

while((ch = (char)reader.read())!= '\n'){

s.append(ch);

}

}catch(Exception e){

s = new StringBuffer("");

}

return s.toString().trim();

}

public static int getInt(){

String s = getString();

int n;

try{

n = Integer.parseInt(s);

}catch(Exception e){

n = 0;

System.out.println("숫자 에러");

}

return n;


}

public static void main(String[] args){

String name;

int age;

IOReader reader = new IOReader();

System.out.println("이름:");

name = reader.getString();

System.out.println("나이:");

age = reader.getInt();


System.out.println("이름:"+name+" 나이:"+age);


}


}












Posted by -현's-

댓글을 달아 주세요



●바이트 스트림(Byte Stream)

- 데이터의 종류가 파일, 그림, 동영상 등의 바이트 기반인 경우 사용하는 클래스로 바이트 단위로 입출력을 제어한다.


InputStream

OutputStream 

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

FileInputStream

FileOutputStream

 파일 입출력을 위한 바이트 스트림 클래스

DataInputStream

DataOutputStream

 자바 기본형(primitive) 데이터를 입출력 하기 위한 클래스

BufferedInputStream

BufferedOutputStream

 입출력 스트림에 버퍼링 기능을 추가한 클래스

PrintStream 

 System.out을 통해 콘솔로 출력하기 위한 클래스







●OutputSTream, InputStream 클래스

- 다른 세부적인 기능을 하는 하위 클래스의 상위 추상 클래스이다. 이 클래스들은 자신들은 객체가 될수 없고, 객체가 될수 있는 하위 클래스가 있다. byte단위로 입,출력을 한다.


- OutputStream 클래스 예제

import java.io.*;


public class OutputStream

{

public static void main(String args[]) throws java.io.IOException{

for(byte i=32; i<127; i++){

System.out.write(i);

System.out.write('\t');

}

}

}








- InputStream.java

import java.io.*;

public class InputStream{

public static void main(String args[]) throws java.io.IOException{

byte[] buf = new byte[100];

int a;

while((a=System.in.read(buf)) >=0)

System.out.write(buf, 0, a);

}

}











●FileOutputStream 클래스

- 데이터를 파일에 바이트 스트림으로 저장하기 위해 사용된다. 파일멸이나 File클래스의 객체를 인수로 넘겨줘서 시스템에 파일을 직접 생성할 수 있다. 기본적으로 파일이 이미 존재하면 그 파일에 덮어 쓰게 되고 기존의 내용은 사라지게 된다.



FileOutputStreamEx.java

import java.io.*;


class FileOutputStreamEx

{

public static void main(String args[]) throws IOException{

FileOutputStream f = new FileOutputStream("a.txt");

f.write('A');

f.write('B');

f.close();

}

} 













●FileInputStream 클래스

- 시스템의 파일로부터 데이터를 바이트 스트림으로 읽어 들이기 위해 사용되고, 파일이 없으면 IOException을 발생시킨다.


- FileInputStreamEx

import java.io.*;


class FileInputStreamEx

{

public static void main(String args[]) throws IOException{

FileInputStream f = new FileInputStream("a.txt");

System.out.println(f.read());

f.close();

}

}











●DataOutputStream, DataInputSream 클래스

- 단순히 바이트만을 읽고 쓰는 기존의 스트림보다 상위 수준의 통신이  가능하도록 하는 기능을 제공한다. 기존의 스트림은 바이트 단위로 데이터를 읽는 기능밖에 없기때문에 기본 자료형의 데이터를 읽거나 쓰기위해서는 사용자가 직접 제어 해야했지만 이 클래스를 사용하면 원하느 ㄴ타입으로 데이터를 읽고 쓰는 것이 가능하다.


- DataIOStreamEx.java

import java.io.*;


class DataIOStreamEx{

public static void main(String[] args){

char input_char = 'a', output_char = (char)0;

int input_int = 10, output_int=0;

String input_str = "abc", output_str="";


DataInputStream dis = null;

DataOutputStream dos = null;


try{

FileOutputStream fo = new FileOutputStream("fileoutput.txt");

dos = new DataOutputStream(fo);

}catch(FileNotFoundException e){

System.out.println(e);

}


try{

dos.writeChar(input_char);

dos.writeInt(input_int);

dos.writeUTF(input_str);

dos.close();

}catch(IOException e){

System.out.println(e+"aaa");

}


try{

FileInputStream fi = new FileInputStream("fileoutput.txt");

dis = new DataInputStream(fi);

}catch(FileNotFoundException e){

System.out.println(e+"aa");

}


try{

output_char = dis.readChar();

output_int = dis.readInt();

output_str = dis.readUTF();

}catch(IOException e){

System.out.println(e+"a");

}

System.out.println(output_char);

System.out.println(output_int);

System.out.println(output_str);


}

} 













●BufferedInputStream, BufferedOutputStream

- 기존의 스트림위에서 입출력 버퍼링을 제공하는 필터 스트림 클래스이다. 읽기와 쓰기가 메모리 버퍼에서 직접 이루어질 수 있고, 운영체제는 가끔씩만 호출되기 때문에 오버헤드가 줄어든다.


-BufferedIOStreamEx.java

import java.io.*;


public class BufferedIOStreamEx

{

public static void main(String[] args){

int i, len = 0;

byte[] buffer = new byte[256];

BufferedInputStream in = null;

BufferedOutputStream out = null;

String sourceFile = "BufferedIOStreamEx.java";

String destFile = "output.txt";

System.out.println("소스 파일 이름:"+sourceFile);

System.out.println("목표 파일 이름:"+destFile);

try{

in = new BufferedInputStream(new FileInputStream(new File(sourceFile)));

FileOutputStream file_out = new FileOutputStream(destFile);

out = new BufferedOutputStream(file_out, 256);

}catch(FileNotFoundException e){

System.out.println(e);

}


try{

while((i=in.read(buffer))!= -1){

out.write(buffer);

len+=1;

System.out.println("현재 읽은 데이터["+i+","+len+"], 나머지 데이터["+in.available()+"]");

}

in.close();

out.close();

System.out.println(len+"바이트 데이터 복사완료");


}catch(IOException e){

System.out.println(e);

}

}

} 













Posted by -현's-

댓글을 달아 주세요


●스트림

- 스트림은 하드웨어 장치로부터 데이터를 읽거나 기록할 때 사용하는 중간 매개체 역할을 하는 것이다. 자바에서 입출력은 스트림(stream)을 통해 이루어진다. 자바에서는 java.io 패키지에서 입출력에 관한 기능들을 제공한다.


- 스트림을 기능에 따라 분류하면 스트림의 기본적인 기능을 담당하는 노드 스트림과 노드 스트림이나 다른 필터 스트림에 붙어서 더 효율적이도록 기능을 확장 시켜주는 필터 스트림으로 분류할 수 있다. 노드 스트림에는 FileInputStream, FileOutputStream 클래스가 있고, 필터 스트림에는 BufferedInputStream, BufferedOutputStream, DataInputStream, DataOutputstream 클래스 등이 있다.


- 스트림을 데이터 종류에 따라 분류하면 바이트 스트림과 문자 스트림으로 분류할 수 있다. 바이트 스트림은 데이터가 8비트 단위로 전송되어 입출력을 지원하는 스트림으로 파일입출력, 객체의 입출력, 기본 자료형의 입출력 등에 사용된다. 문자 스트림은 문자 전송을 위한 스트림으로 2바이트 단위로 전송된다.


- 바이트 스트림의 계층도













- 문자 스트림 계층도















Posted by -현's-

댓글을 달아 주세요


●UDP 소켓

- TCP 소켓은 서로 연결된 상태에서의 통신 방법이다. 이 방법은 높은 신뢰성이 요구된느 응용 프로그램에 적합하지만 높은 신뢰성이 요구되지 않거나 적은 양의 데이터를 전송할 때는 네트워크에 부담을 많이 주기 때문에 적합하지 않다. 그래서 이때는 UDP소켓을 쓰는 것이 좋다.


- UDP는 TCP소켓에 비해 신뢰성과 안정성은 부족하지만 연결을 설정하지 않으므로 네트워크에 부담을 주지 않는다.


- 자바에서는 DatagramPacket, DatagramSocket 클래스를 사용한다.


DatagramPacket 클래스는 데이터그램을 사용할 수 있게 한다.


- 데이터그램 패켓은 비연결 패킷 전송 서비스를 구현하기 위해 사용한다.


DatagramSocket 클래스는 데이터그램 패킷을 보내거나 받기 위한 데이터그램 소켓 기능을 제공해준다.








●ex

- UDPServer.java


import java.net.*;

import java.io.*;


public class UDPServer

{

public final static int discardPort = 3000;

static byte[] buffer = new byte[65507];


public static void main(String[] args){

int port;

try{

port=Integer.parseInt(args[0]);

}catch(Exception e){

port=discardPort;

}


try{

DatagramSocket ds = new DatagramSocket(port);

DatagramPacket dp = new DatagramPacket(buffer, buffer.length);

while(true){

try{

ds.receive(dp);

String s = new String(dp.getData(), 0, 0, dp.getLength());

System.out.println(dp.getAddress()+" at port"+dp.getPort()+" says"+s);

}catch(IOException e){

System.err.println(e);

}

}

}catch(SocketException se){

System.out.println("22");

System.err.println(se);

}

}

}





- UDPClient.java


import java.net.*;

import java.io.*;


public class UDPClient

{

public final static int port = 3000;

public static void main(String[] args){

String hostname;

if(args.length>0){

hostname=args[0];

}else{

hostname="localhost";

}


try{

String strInput;

DatagramPacket outPacket;


InetAddress server = InetAddress.getByName(hostname);


BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));


DatagramSocket dSock = new DatagramSocket();


while(true){

strInput = userInput.readLine();


if(strInput.equals("quit"))break;


byte[] data = strInput.getBytes();


outPacket = new DatagramPacket(data, data.length, server, port);


UDPClient.viewInfo(outPacket);


dSock.send(outPacket);

}


}catch(UnknownHostException e){

System.err.println(e);

}catch(SocketException se){

System.err.println(se);

}catch(IOException e){

System.err.println(e);

}

}


public static void viewInfo(DatagramPacket packet){

System.out.println("패킷의 대상 주소:"+packet.getAddress().toString());

System.out.println("패킷의 대상 포트:"+packet.getPort());

System.out.println("패킷의 데이터 크기:"+packet.getLength());

}

}


 



























Posted by -현's-

댓글을 달아 주세요


●소켓

- 네트워크에 연결된 각 컴퓨터간에 데이터를 주고 받을 때 사용하는 도구이다.


- 소켓은 하드웨어 장비가 아닌 소프트웨어 차원의 개발 도구이다.





서버 소켓

- 서버 소켓은 클라이언트 소켓으로부터 접속 요청을 기다리고, 접속 요구가 있으면 클라이언트와 통신할 서버 측의 소켓을 생성한다.


- 자바에서는 ServerSocket 클래스가 서버 소켓을 위한 기능을 제공한다.








●클라이언트 소켓

- 서버 소켓의 IP주소와 포트 번호를 필요로한다.


- 클라이언트에서 소켓 객체를 만들면, 소켓은 바로 주어진 IP주소와 포트 번호로 서버에 연결을 시도하고 서버소켓은 다른 소켓을 만들어 클라이언트 소켓과 연결한다.


- 자바에서는 Socket 클래스를 이용한다.










●ex

- 서버에서 클라이언트에 현재 시간을 전송하는 예제


- ServerSocketTest.java (서버 소켓)

import java.io.*;

import java.net.*;

import java.util.Date;


public class ServerSocketTest

{

public final static int daytimeport=13;

public static void main(String args[]){

ServerSocket theServer;

Socket theSocket = null;

BufferedWriter writer;

try{

theServer = new ServerSocket(daytimeport);

System.out.println("서버 시작");

while(true){

try{

theSocket = theServer.accept();

OutputStream os = theSocket.getOutputStream();

writer = new BufferedWriter(new OutputStreamWriter(os));

Date now = new Date();

writer.write(now.toString()+"\r\n");

writer.flush();

}catch(IOException e){

System.out.println(e);

}finally{

try{

if(theSocket !=null ) theSocket.close();

}catch(IOException e){

System.out.println(e);

}

}

}

}catch(IOException e){

System.out.println(e);

}

}

}


 




- ClientSocketTest.java (클라이언트 소켓)

import java.io.*;

import java.net.*;


public class ClientSocketTest

{

public static void main(String args[]){

Socket theSocket;

String host;

InputStream is;

BufferedReader reader;

if(args.length>0){

host = args[0];

}else{

host="localhost";

}


try{

theSocket = new Socket(host, 13);

is = theSocket.getInputStream();

reader = new BufferedReader(new InputStreamReader(is));

String theTime = reader.readLine();

System.out.println("서버의 시간은:"+theTime);

}catch(UnknownHostException e){

System.out.println(args[0]+"호스트를 찾을 수 없음");

}catch(IOException e){

System.err.println(e);

System.out.println("a");

}




}




} 













Posted by -현's-

댓글을 달아 주세요


●URLEncoder 클래스

- 운영체제마다 일부 문자를 인식하는 방법이 다르기 때문에 이를 해결하기 위해 사용하는 클래스이다.


- URLEncoder 클래스는 데이터를 웹서버에서 요구하는 데이터 형식으로 바꾸는 기능을 한다. 


-위에서 웹서버가 요구하는 형식은 'x-www-form-urlencoded'라고 불리는 MIME 형식을 말한다.


-MIME 형식 변환 규칙

1. 아스키 문자(a~z, A~Z, 0~9), '.', '-', '_' 등은 그대로 전달된다.

2. 공백은 '+'로 전달된다.

3. 기타문자는 %ㅁㅁ 와 같이 전달된다. 이때 %ㅁㅁ는 아스키코드를 16진수화한 결과를 나타낸 것이다.









●URLDecoder 클래스

- URLEncoder클래스와 반대의 기능을 하는 클래스로, 'x-www-form-urlencoded' 형식의 MIME형식을 일반 문다열로 변환한다.



- ex

import java.net.*;

import java.io.*;


public class URLClass

{

public static void main(String[] args) throws UnsupportedEncodingException{

String strEncoding = URLEncoder.encode("abc 대한민국 ! @ # $ % 123 쀍", "utf-8");


String strDecoding = URLDecoder.decode(strEncoding, "utf-8");


System.out.println("인코딩된 문자열:"+strEncoding);

System.out.println("디코딩된 문자열:"+strDecoding);

}

} 












●URLConnection 클래스

- URL과 비슷한 기능을 가지지만 URL클래스는 단순 접속을 하는데 반해, URLConnection클래스는 UTL을 이용하여 참조된 자원에 대해 읽고 쓰는 작업을 할 수 있다.


- 어플리케이션과 URL간의 통신 링크를 작업을 하며, URL에 데이터 쓰기를 가능하게 해준다. 예를 들어 클라이언트가 서버에 보내는 서비스 요청이나 http로 폼 데이터를 post방식으로 보내는 역할을 한다.


- URLConnection 클래스 객체생성과 URL연결 위한 단계


1. URL에 대한 openConnection 메소드를 호출해서 URLConnection 클래스 객체를 생성한다.

ex) URL url = new URL("http://naver.com");

     URLConnection connection = url.openConnection();


2. connect 메서드에 의해 연결이 이루어진다.

ex) connection = url.openConnection();


3. 셋업 파라미터와 일반 요청 프로퍼티를 이용하여 연결한다.


4. 연결이 되면 객체는 이용 가능하게 되고, 객체의 헤더 항목과 내용을 읽을 수 있다.

 



- ex

import java.net.*;

import java.io.*;


public class URLConnectionTest

{

public static void main(String[] args){

try{

URL url = new URL("http://main.nateimg.co.kr/img/cms/content_pool/2014/01/140129_nate_BI(0).png");

URLConnection conn = url.openConnection();

System.out.println("문서의 타입:"+conn.getContentType());


}catch(Exception e){

//e.printStacktrace();

}

}

}

 









Posted by -현's-

댓글을 달아 주세요


●URL

- http,ftp,telnet 등의 서비스를 지원하는 웹 서버들의 위치를 표현하는 체계이다.


- 보통 아래의 형태를 가진다.

 protocol://hostname[:port]/path

(ex. http://naver.com)





●URL 클래스

- 웹상의 주소(URL)을 나타내는 클래스이다.


- InetAddress클래스보다 확장된 개념으로 네트워크 연결까지 가능하다. 따라서 URL객체 생성 시 잘못된 URL형태를 주었을때의 예외처리를 반드시 해야한다.


- 자바에서는 URL클래스를 사용하면 간단하게 호스트로부터 데이터를 읽어올 수 있다.


-ex1

  ->URL클래스로 호스트의 정보를 표시하고 페이지를 화면에 출력하는 예제

1.URL 객체 생성

  URL url = new URL("http://www.naver.com");

2. URL객체로의 스트림 열기

  InputStream in = url.openStream();

3. 받는 스트림을 버퍼에 저장

  BufferedReader bf = new BufferedReader( new InputStreamReader(in));

4. 버퍼를 화면에 출력하고 스트림 닫기




import java.net.*;

import java.io.*;


public class url1

{

public static void main(String args[]){

try{

URL url=new URL("http://google.com");

BufferedReader bf;

String line;


System.out.println("Port:"+url.getPort());

System.out.println("Protocol:"+url.getProtocol());

System.out.println("HostName:"+url.getHost());

System.out.println("File:"+url.getFile());

System.out.println("Ref:"+url.getRef());


bf = new BufferedReader(new InputStreamReader(url.openStream()));


while((line = bf.readLine())!= null){

System.out.println(line);

}

bf.close();

}catch(Exception e){

System.out.println("Exception:"+e);

}

}

}










- ex2

  ->버튼을 누르면 다른 url로 이동하는 애플릿 프로그램이다


URLButton.java


import java.awt.*;

import java.net.*;

import java.applet.Applet;


public class URLButton extends Applet

{

URL url = null;

String str = null;


public void init(){

String urlString = null;

setLayout(new GridLayout(1,1));

str = getParameter("str");

if(str==null){

str="Button";

}

urlString = getParameter("url");

if(urlString==null){

urlString="http://";

}

try{

url=new URL(urlString);

}catch(MalformedURLException e){

System.out.println("Invalid URL:"+urlString);

}

Button btn = new Button(str);

add(btn);

resize(100,60);

}



public boolean action(Event e, Object arg){

if((e.target instanceof Button) && (arg.equals(str))){

getAppletContext().showDocument(url);

}


return false;

}

}




url.html

<html>

<body>


<applet code=URLButton>

<param name=str value="네이버">

<param name=url value="http://naver.com">

</applet>

<applet code=URLButton>

<param name=str value="구글">

<param name=url value="http://google.com">

</applet>

<applet code=URLButton>

</applet>


</body>

</html>










Posted by -현's-

댓글을 달아 주세요