• 第十周总结


    总结

    本周主要讲了,字节流,字符流的一些基本操作,转换流,内存操作流,管道流,打印流的基本介绍,还有System对io的支持。

    字节流与字符流的基本操作

    在程序中所有的数据都是以流的方式进行传输或保存的,需要数据用输入流,保存数据用输出流,
    主要操作流过程如下:

    • 1.使用file类打开一个文件。
    • 2.使用字节流或字符流的子类指定输出的位置。
    • 3.进行读写操作。
    • 4.关闭输入输出流。

    字节流

    字节流主要是byte数据类型,操作类为OutputStream和InputStream,outputSteam是io字节输出的最大父类,此为抽象类,要用子类实例化对象

    如指定文件不存在,则会自动创建文件,并写入。

    如输入文件路径不存在则会出现异常。

    字符流

    字符输出流Writer,输入流Reader也为抽象类,与前面一样要利用子类实例化对象,

    字节流与字符流的区别

    字节流操作时不会到缓冲区,字符流操作时会到缓冲区。

    其他流

    转换流

    OutputStreamWriter类是Writer的子类,将输出的字符流转换为字节流,即将一个字符流的输出对象变为字节流输出对象。
    InputStreamReader类是Reader的子类,将输入的字节流转换成字符流,即将一个字节流的输入对象变为字符流的输入对象。

    不管如何操作,最终全部是以字节的形式保存在文件之中。

    内存操作流

    字节内存流:ByteArrayInputStream内存字节输入流,ByteArrayOutputStream内存字节输出流
    字符内存流:CharArrayReader内存字符输入流,CharArrayWriter内存字符输出流。
    以字节流操作为主。


    内存操作流一般在生成一些临时信息时才会使用,如果将这些临时信息保存在文件中,则代码执行完之后肯定还要删除这个临时文件,那么此时使用内存操作流时最合适的。

    管道流

    管道流的主要作用时进行两个线程间的通信,分为管道输出流PipedOutputStream,管道输入流PiepdInputSream,如果要进行管道输出则必须把输出流连在输入流上。

    打印流

    打印流时输出信息最方便的类,主要包含字节打印流PrintStream,字符打印流PrintWriter,主要讲解字节打印流
    PrintStream时OutputStream的子类

    使用打印流进行输出格式化

    System类对IO的支持


    本来这三个常量应该大写,但此处用小写,是java历史发展的产物。
    关于System.in键盘输入
    有两个问题

    • 指定数据输入的长度,如果现在输入的数据超出了长度范围,则只能输入部分数据。
    • 如果指定的Byte数组为奇数则还有可能出现中文乱码。
      如果不指定大小输入英文是没有问题的,输入中文还是会出现乱码。
      最好的输入方式是将全部输入的数据暂时放到一块内存中,然后一次性从内存中读取出数据。

    输入输出重定向

    这个是改变输入流来源,输入流来源


    对于老师最后提出的把奇数位的英文子串小改大

    package test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.RandomAccessFile;
    
    public class Dxiao {
    	public static void main(String args[]) {
    		File f = new File("H:" + File.separator + "test.txt");
    		try {
    			f.createNewFile();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		RandomAccessFile rdf = null;
    		try {
    			rdf = new RandomAccessFile(f,"rw");
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		InputStream input = System.in;
    		StringBuffer buf = new StringBuffer();
    		System.out.println("请输入要改变大小写的字符串。。。。");
    		int temp = 0;
    		String str = null;
    		try {
    			while((temp = input.read()) != -1) {
    				char c = (char)temp;
    				if(c == '
    ') {
    					break;
    				}
    				buf.append(c);
    			}
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		str = buf.toString();
    		try {
    			rdf.writeBytes(str);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		InputStream ip = null;
    		OutputStream out = null;
    		try {
    			out = new FileOutputStream(f,true);
    		} catch (FileNotFoundException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    		try {
    			ip = new FileInputStream(f);
    			byte ch[] = new byte[(int)f.length()];
    			try {
    				ip.read(ch);
    				String stri = ch.toString();
    				char c[] = stri.toCharArray();
    				for(int i = 0; i < c.length;i++) {
    					if((i%2 == 0) && c[i] >= 'a' && c[i] <= 'z') {
    						c[i] = (char) (c[i] - 32);
    					}
    				}
    				String b ="
    " +  c.toString();
    				byte d[] = b.getBytes();
    				for(int i = 0; i < b.length();i++) {
    					out.write(d[i]);
    					out.close();
    				}
    				ip.close();
    				
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    }
    

    本来是想把这周学的东西都用一下的,报了一个io异常,没时间找出这个异常在哪了,后面再看一下了。

  • 相关阅读:
    jQuery的核心对象、原型对象、静态方法、动态方法
    请写出css中选择器(元素选择器、类选择器、id选择器)的优先级顺序,和当各种选择器组合时,优先级的计算规则是什么?
    css3中的box-sizing常用的属性有哪些?分别有什么作用?
    不同域的页面如何通信(跨域)
    浮动与定位
    获取DOM元素的方式有哪些
    简要说明盒子模型和flex布局
    牛逼哄哄的对象深复制
    欧拉函数
    P2659 美丽的序列
  • 原文地址:https://www.cnblogs.com/xiao--liang/p/11788452.html
Copyright © 2020-2023  润新知