자바 학습 노트 - 022 일 째
개요
두 가지 대칭 성
바이트
문자
InputStream
Reader
OutputStream
Writer
입력
출력
InputStream
OutputStream
Reader
Writer
read()
write()
두 가지 디자인 모델 1. 인 테 리 어 모델 - 여과 흐름 2. 어댑터 모델 - 전환 흐름
세 가지 흐름 1. 데이터 흐름 (원시 흐름) 2. 여과 흐름 (처리 흐름) 2. 변환 흐름 (인 코딩 변환)
원시 흐름
FileOutputSteam - 출력 목적지 로 파일 지정 - 데이터 흐름 (원본 흐름)
여과 류
PrintStream - 출력 되 지 않 은 목적 지 는 데이터 흐름 에 의존 해 야 사용 할 수 있 습 니 다. - 여과 흐름 (처리 흐름) 여과 흐름 은 보통 데이터 흐름 보다 더 많은 방법 을 가지 고 대류 에 대해 다양한 작업 을 할 수 있 습 니 다.
System 의 in 과 out 의 두 흐름 은 방향 을 바 꿀 수 있 습 니 다
System.setOut(out);
예 1: 99 곱셈 표 public static void main(String[] args) {
try (PrintStream out = new PrintStream(new FileOutputStream("c:/99.txt"))) {
// try (PrintStream out = new PrintStream("c:/99.txt")) {
// System in out
// System.setOut(out);
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
// System.out.printf("%d*%d=%d\t", i, j, i * j);
out.printf("%d*%d=%d\t", i, j, i * j);
}
// System.out.println();
out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
예 2: 그 중의 작은 지식: 클래스 경로 에서 자원 파일 을 가 져 오 는 방법:
public static void main(String[] args) throws InterruptedException {
//
ClassLoader loader = Test01.class.getClassLoader();
InputStream in = loader.getResourceAsStream("resources/ .txt");
// try (Reader reader = new FileReader("c:/ .txt")) {
try (Reader reader = new InputStreamReader(in)) {
BufferedReader br = new BufferedReader(reader);
// LineNumberReader lineNumberReader = new LineNumberReader(reader);
String str;
while ((str = br.readLine()) != null) {
// while ((str = lineNumberReader.readLine()) != null) {
// System.out.print(lineNumberReader.getLineNumber());
System.out.println(str);
Thread.sleep(1000);
}
} catch (IOException e) {
e.printStackTrace();
}
}
전환 흐름
변환 흐름 - 바이트 흐름 을 문자 흐름 (바이트 에서 문자 로 의 변환 실현) 프로그램 에서 인 코딩 변환 (8 비트 인 코딩 을 16 비트 인 코딩 으로 변환) 을 하려 면 변환 흐름 예 1: 일반 방법 을 사용 해 야 합 니 다.
public static void main(String[] args) {
System.out.print(" : ");
byte[] buffer = new byte[1024];
try {
int totalBytes = System.in.read(buffer);
String str = new String(buffer, 0, totalBytes);
int endIndex = str.indexOf("\r
");
if (endIndex != -1) {
str = str.substring(0, endIndex);
}
int a = Integer.parseInt(str);
// System.out.println(str.toUpperCase());
System.out.println(a > 5);
} catch (IOException e) {
e.printStackTrace();
}
}
예 2: 변환 흐름 은 Scanner 를 사용 하지 않 고 키보드 입력 으로 데 이 터 를 읽 습 니 다.
public static void main(String[] args) {
System.out.print(" : ");
try {
// - ( )
// ( 8 16 )
InputStreamReader inputReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputReader);
String str;
while ((str = bufferedReader.readLine()) != null) {
System.out.println(str.toUpperCase());
}
} catch (IOException e) {
e.printStackTrace();
}
}
서열 화 와 반 서열 화
대상 을 흐름 에 기록 하기 - 직렬 화 (serialization) 직렬 화 / 압축 파일 / 절 임
흐름 에서 대상 읽 기 - 역 직렬 화 (역 직렬 화 / 압축 파일 해제)
serial VersionUID 는 버 전 번호 가 transient 에 의 해 수 정 된 속성 에 해당 하 며 계열 화 와 반 직렬 화 에 참여 하지 않 습 니 다
private transient String tel;
. 주의: 학생 대상 이 직렬 화 작업 을 지원 하려 면 학생 대상 과 관련 된 다른 대상 도 직렬 화 를 지원 해 야 합 니 다.예 1: 학생 류 와 차량 류 의 직렬 화 저장 대상 을 파일 로 하고 학생 류 를 역 직렬 화 하여 읽 습 니 다.
public class Student implements Serializable{
private static final long serialVersionUID = 1L; // serialVersionUID
private String name;
private int age;
// transient
private transient String tel;
//
private Car car;
public Student(String name, int age, String tel) {
this.name = name;
this.age = age;
this.tel = tel;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "name=" + name + ", age=" + age +
", tel=" + tel + "," + car.toString();
}
}
차량 종류:
public class Car implements Serializable{
private static final long serialVersionUID = 1L;
private String brand;
private int maxSpeed;
public Car(String brand, int maxSpeed) {
this.brand = brand;
this.maxSpeed = maxSpeed;
}
@Override
public String toString() {
return "car=[brand=" + brand + ", maxSpeed=" + maxSpeed + "]";
}
}
직렬 화:
public static void main(String[] args) {
Student student = new Student(" ", 18, "13521324325");
student.setCar(new Car("QQ", 128));
System.out.println(student);
try (OutputStream out = new FileOutputStream("c:/stu.data")) {
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(student);
System.out.println(" !");
} catch (IOException e) {
e.printStackTrace();
}
}
역 직렬 화:
public static void main(String[] args) {
try (InputStream in = new FileInputStream("c:/stu.data")) {
ObjectInputStream ois = new ObjectInputStream(in);
Object object = ois.readObject();
System.out.println(object);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
어제 숙제 설명
public static void main(String[] args) {
try (Writer writer = new FileWriter("c:/ .txt")) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
String str = String.format("%d*%d=%d\t", i, j, i * j);
writer.write(str);
}
writer.write("\r
");
}
System.out.println(" !");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void fileCopy(String source, String target) throws IOException {
try (InputStream in = new FileInputStream(source);
OutputStream out = new FileOutputStream(target)) {
byte[] buffer = new byte[512];
int totalBytes;
while ((totalBytes = in.read(buffer)) != -1) {
out.write(buffer, 0, totalBytes);
}
}
}
public static void main(String[] args) {
try {
long start = System.currentTimeMillis();
fileCopy("C:/Users/Administrator/Downloads/YoudaoDict.exe", "C:/Users/Administrator/Desktop");
long end = System.currentTimeMillis();
System.out.println((end - start) + "ms");
} catch (IOException e) {
e.printStackTrace();
}
}
숙제.
public class RandomText {
private List list = new ArrayList<>();
private String str;
private int totalRows;
private int randomNum;
public RandomText() {
try {
this.random();
} catch (IOException e) {
e.printStackTrace();
}
}
private void random() throws IOException {
ClassLoader loader = RandomText.class.getClassLoader();
InputStream in = loader.getResourceAsStream("resources/ .txt");
InputStreamReader reader = new InputStreamReader(in);
BufferedReader br = new BufferedReader(reader);
while ((str = br.readLine()) != null) {
list.add(str);
totalRows += 1;
}
}
public String randomLine() {
randomNum = (int) (Math.random() * totalRows);
str = list.get(randomNum);
return str;
}
}
창 클래스:
public class MyFrame extends JFrame {
private static final long serialVersionUID = 1L;
private RandomText rt = new RandomText();
private JLabel label;
public MyFrame() {
this.setTitle(" ");
this.setSize(350, 200);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
label = new JLabel(rt.randomLine());
label.setFont(new Font(" ", Font.PLAIN, 18));
this.add(label);
JPanel panel = new JPanel();
this.add(panel, BorderLayout.SOUTH);
JButton button = new JButton(" ");
button.addActionListener(e -> {
String command = e.getActionCommand();
if (command.equals(" ")) {
label.setText(rt.randomLine());
}
});
panel.add(button);
}
public static void main(String[] args) {
new MyFrame().setVisible(true);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.