190507 복습, 스레드
<데이터 읽고 쓰는 Target과 자료형의 종류!>
(화면) 콘솔
읽기
int asciiNum = System.in.read();
String str = br.readLine();
pulbic class System { pulbic static InputStream in; pulbic static PrintStream out; pulbic static PrintSream err; }
BufferedReader br;
BufferdReader생성자
- BufferedReader ( Reader객체 ){}
br = new BufferdReader( new InputStreamReader(System.in) );
- System.in 이 키보드 입력을 받고
- InputStreamReader 에서 바이트스트림 => 문자 단위로 변환
- BufferdReader 에서 변환된 문자들을 버퍼에 저장!
쓰기
- System.out.println(데이터);
- System.out.print(데이터);
- System.out.printf(데이터);
JTextArea, JTextField
- 읽기
- JTextArea ta; JTextField tf;
- ta.getText();
- tf.getText();
- 쓰기
- ta.setText("문자열데이터");
- ta.append("문자열데이터");
- tf.setText("문자열데이터");
- 읽기
File (==> (바이트단위) FileInputStream fis, (문자단위)FileReader fr, (바이트단위)FileOutputStream fos, (문자단위)FileWriter fw)
- 읽기
- int b = fis.read(바이트데이터);
- int c = fr.read(문자데이터);
- 쓰기
- fos.write(바이트데이터);
- fw.write(문자데이터);
- fw.write(문자열데이터);
- 읽기
미션) Swing을 통해 SimpleNotePad를 만드시오
- ta(JTextArea) 읽기 ===> 파일 쓰기 : 파일저장
- 필요한 입출력 객체 FileOutputStream, FileWriter
<객체 직렬화> Serialization
객체를 연속적인 데이터롤 변환하는 것(반대과정은 역직렬화라고 함)
객체의 인스턴스변수들의 값을 일렬로 나열하는 것
- 객체를 파일이나 네트워크에 전송하기 위해 바이트 형태의 데이터로 변환하는것
객체를 스트림으로 파일에 저장하는 방법
transient키워드 : 객체 멤버변수중 직렬화 대상에 제외
class Person { String name; int age; String job; } //=>> class Person [String name, int age, String job]
- 관련 클래스) - 객체단위로 쓰고 읽자!
- ObjectOutputStream ObjectInputStream
- Serializable(마커 인터페이스)
package j0507;
import java.io.Serializable;
public class Person implements Serializable//객체 직렬화 하겠음! 이라는 체크를 해줘야 함. implements Serializable
{
String name = "바보";
int age = 13;
transient String job = "학생"; // 직렬화 대상에서 제외 => 데이터값을 전달하지 않겠음.
}
//Person 객체를 파일에 쓸 수 있습니까? => ObjectOutputStream 사용!
package j0507;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class ObjectWriteTest //객체 쓰기 테스트
{
public static void main(String[] args) throws Exception
{
FileOutputStream fos = new FileOutputStream("person.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Person p = new Person();
Person p2 = new Person();
p2.name = "이진주";
p2.age = 1;
p2.job = "강아지";
oos.writeObject(p);
oos.writeObject(p2);
oos.writeObject("직렬화 하이~!");
oos.writeInt(300);
oos.writeBoolean(true);
oos.close();
fos.close();
System.out.println("객체 쓰기 성공~!");
}
}
package j0507;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectReadTest
{
public static void main(String[] args) throws Exception
{
FileInputStream fis = new FileInputStream("person.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Person p = (Person) ois.readObject();
System.out.println("이름 : " + p.name);
System.out.println("나이 : " + p.age);
System.out.println("직업 : " + p.job);
System.out.println("========================");
Person p2 = (Person) ois.readObject();
System.out.println("이름 : " + p2.name);
System.out.println("나이 : " + p2.age);
System.out.println("직업 : " + p2.job);
System.out.println("========================");
System.out.println("메세지 :" + ois.readObject());
System.out.println("정수 :" + ois.readInt());
System.out.println("논리 :" + ois.readBoolean());
}
}
<스레드> Thread
- 프로세스내에서 순차적으로 동작하는 문장들의 단일 집합.
- 경량(light weight)의 프로세스
- 하나의 프로세스내에 다수개의 스레드를 정의할 수 있으며 다수개의 스레드를 동시에 수행 될 수 있다.(다중스레드)
- 자바에서는 클래스(Thread)와 인터페이스(Runnable)지원
<스레드 개념>
void a()
{
1;
2;
3;
}
void b()
{
4;
5;
6;
}
void c()
{
7;
8;
9;
}
//===main
a();
b();
c();
//일반메소드의 경우 a()메소드의 문장을 전체 실행해야 b()메소드 실행
//일반메소드의 경우 기다림, 순차적인 실행!
//[실행결과] 1;2;3;4;5;6;7;8;9;
//만약 a,b,c()메소드가 스레드라고 한다면 기다림없이, 동시에 실행!
//[실행결과] 1;4;7;5;2;8;9;3;6;
※스레드 객체 생성
class My extends Thread
{
//스레드 특성 메소드(오버라이딩)
public void run()
{
//동시(독립) 실행코드
}
}
//Thread t = new Tread();
//t.start():
class My2 extends JFrame implements Runnable
{
public void run()
{
//동시실행코드
}
}
//my2 my = new My2();
//m2는 스레드 객체? X
//m2는 Runnable객체? O
//별도의 Thread객체 생성이 필요.
//Thread t2 = new Thread(run()메소드의 위치);
//Thread t2 = new
- 위에서 t를 스레드 객체라고 한다!
문제) MainView 클래스 상단(North)에 현재시간 정보를 작성하시오
Thread.sleep( );
package j0507; public class MyThread extends Thread { //스레드 특성을 갖는 메소드 (동시실행) @Override public void run() { //동시 실행할(기다리지 않는) 문장들 try { for(int i = 1; i< 11; i++) { //Thread.sleep(1000); System.out.println("자바스레드 : " + i); } } catch (Exception e) { e.printStackTrace(); } } }//MyThread
package j0507; public class ThreadTest { public static void main(String[] args) { MyThread t = new MyThread(); // t.run(); //run()메소드를 직접 호출하는 일반메소드와 같은 실행을 해버림. t.start(); // start()메소드는 '스레드'작접 스케줄러라고 보면 된다. } }
궁금상자
- 왜 Thread는 Exception이 안될까? @Override때문!
'클라우드 기반 웹 개발자 과정 공부 > JAVA' 카테고리의 다른 글
190509_Day22 소켓 (0) | 2019.05.09 |
---|---|
190508_Day21 복습, java.net (0) | 2019.05.08 |
190503_Day19 복습, MVC다른방법, IO (0) | 2019.05.03 |
190502_Day18 MVC Model2 (0) | 2019.05.02 |
190430_Day17 숫자야구게임, Swing (0) | 2019.04.30 |