java中bytebuffer类中的mark有什么用?

Python09

java中bytebuffer类中的mark有什么用?,第1张

一个临时存放的位置下标。调用mark()会将mark设为当前的position的值,以后调用reset()会将position属性设

置为mark的值。mark的值总是小于等于position的值,如果将position的值设的比mark小,当前的mark值会被抛弃掉。

mark是reset的后续方法

public void mark(int readlimit)在输入流中的当前位置上作标记。reset 方法的后续调用将此流重新定位在最后标记的位置上,以便后续读取操作重新读取相同的字节。

readlimit 参数告知此输入流在标记位置无效之前允许读取的字节数。

此方法只执行 in.mark(readlimit)。

覆盖:

类 InputStream 中的 mark

参数:

readlimit - 在标记位置变得无效前可以读取字节的最大限制。

public class Student {

    // 学号

    private int ID

    // 姓名

    private String name

    // 两门课成绩

    private double javamark

    // 网页成绩

    private double webmark

    // 总成绩

    private Double sum

    // 平均成绩

    private Double avg

    public Student() {

    }

    public Student(int ID, String name, double javamark, double webmark) {

        this.ID = ID

        this.name = name

        this.javamark = javamark

        this.webmark = webmark

    }

    public double sum() {

        if (sum == null) {

            sum = javamark + webmark

        }

        return sum

    }

    public double avg() {

        if (avg == null) {

            avg = sum() / 2

        }

        return avg

    }

    public int getID() {

        return ID

    }

    public void setID(int ID) {

        this.ID = ID

    }

    public String getName() {

        return name

    }

    public void setName(String name) {

        this.name = name

    }

    public double getJavamark() {

        return javamark

    }

    public void setJavamark(double javamark) {

        this.javamark = javamark

    }

    public double getWebmark() {

        return webmark

    }

    public void setWebmark(double webmark) {

        this.webmark = webmark

    }

    public Double getSum() {

        return sum

    }

    public void setSum(double sum) {

        this.sum = sum

    }

    public Double getAvg() {

        return avg

    }

    public void setAvg(double avg) {

        this.avg = avg

    }

}

测试类:

import java.math.BigDecimal

import java.math.RoundingMode

import java.util.ArrayList

import java.util.List

public class TestKeShe1 {

    public static void main(String[] args) {

        List<Student> list = new ArrayList<>()

        list.add(new Student(1, "张三", 98, 95))

        list.add(new Student(2, "李四", 80, 90))

        list.add(new Student(3, "王五", 90, 89))

        double sumJava = 0

        double sumWeb = 0

        double maxJava = list.get(0).getJavamark()

        double minJava = list.get(0).getJavamark()

        for (Student stu : list) {

            sumJava += stu.getJavamark()

            sumWeb += stu.getWebmark()

            if (stu.getJavamark() > maxJava) {

                maxJava = stu.getJavamark()

            }

            if (stu.getJavamark() < minJava) {

                minJava = stu.getJavamark()

            }

        }

        System.out.println("Java总分为:" + sumJava + ", 网页总分为:" + sumWeb)

        // 平均分结果保留一位小数

        double avgJava = new BigDecimal(sumJava).divide(new BigDecimal(3), 1, RoundingMode.HALF_UP).doubleValue()

        double avgWeb = new BigDecimal(sumWeb).divide(new BigDecimal(3), 1, RoundingMode.HALF_UP).doubleValue()

        System.out.println("Java平均分为:" + avgJava + ", 网页平均分为:" + avgWeb)

        System.out.println("Java最高分为:" + maxJava + ", Java最低分为:" + minJava)

    }

}