zoukankan      html  css  js  c++  java
  • leetcode157

    The API: int read4(char *buf) reads 4 characters at a time from a file.
    The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file.
    By using the read4 API, implement the function int read(char *buf, int n) that reads n characters from the file.

    模拟法。理清题意:
    模拟内存从硬盘中读数据的方法,先从硬盘读一整块到缓冲区,之后内存根据需求直接从缓冲区要,可以要多可以要少。
    备选被读物:硬盘(隐藏在api背后,通过read4隐式去接触)
    Read4: 读硬盘一整块到内存区
    Read: 内存实际需求
    需要我们做的:实现一个缓冲区和相应功能。更具体的,
    1.read4(char[] buf)就是你每调用一次,会根据隐藏文件里下4个字符是什么复制过来填充好buf数组,并且返回值是告知你有没有可能文件后续内容不够了我没有真的读到4个哦,我尽力了把剩下的都读出来给你了你看好还有多少个哦。
    2.readn(char[] buf, int n)和上面的类似了,只是把4改成了n,n可能很大可能很小。但不管怎么样你把buf按我想要的填好,填多了不可以,如果因为文件不够填少了可以,但你要告诉我你填了多少。

    我的实现:

    /* The read4 API is defined in the parent class Reader4.
          int read4(char[] buf); */
    
    public class Solution extends Reader4 {
        /**
         * @param buf Destination buffer
         * @param n   Maximum number of characters to read
         * @return    The number of characters read
         */
        public int read(char[] buf, int n) {
            char[] buf4 = new char[4];
            int offset = 0;
            
            while (offset < n) {
                int size = read4(buf4);
                if (size == 0) {
                    break;
                }
                for (int i = 0; i < size && offset < n; i++) {
                    buf[offset++] = buf4[i];
                }
            }
            return offset;
        }
    }
  • 相关阅读:
    MSComm控件进行串口编程的基本步骤(转载)
    Linux C Socket编程原理及简单实例(转载)
    ubuntu14.04英文环境下安装中文输入法(转载)
    2015高工机器人年会第一批100名参会嘉宾名单公布
    中国式人机协作
    优傲机器人:协作机器人助力电子制造业智能转型
    netty学习笔记
    画图模板
    文本建模
    自定义IP协议
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/9616622.html
Copyright © 2011-2022 走看看