자바 학습 노트 - 022 일 째

10136 단어
매일 요점
개요
두 가지 대칭 성
바이트
문자
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();
        }
    }

어제 숙제 설명
  • 작업 1: 99 곱셈 표 파일 출력 (일반 방법)
  •     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(); } }
  • 작업 2: 파일 복사 기능 을 실현 하 는 방법 을 쓴다
  •     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();
            }
        }
    

    숙제.
  • * * 작업 1: 텍스트 파일 을 만 들 고 많은 말 을 쓰 고 창 을 만 들 고 무 작위 로 한 마디 를 표시 합 니 다. 점 을 찍 고 다른 문장 을 바 꿉 니 다. * 무 작위 텍스트 클래스:
  • 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);
        }
    }
    

    좋은 웹페이지 즐겨찾기