`
chourentang
  • 浏览: 57424 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java 优化之一:Buffer的使用

    博客分类:
  • Java
阅读更多
1.在java I/O 中,Buffer的使用,使用buffer,文件的读写效率提高一倍左右

   
public void writeFile() {
        try {
            FileWriter fw = new FileWriter("file.txt");
            
            long beginTime = System.currentTimeMillis();
            
            for(int i = 0; i < 10000; i++) {
                fw.write("testline " + i + "\n");
            }
            
            fw.close();
            
            System.out.println("Time spend: " + (System.currentTimeMillis() - beginTime));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public void writeWithBuffer() {
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"));
            long beginTime = System.currentTimeMillis();
            
            for(int i = 0; i < 10000; i++) {
                bw.write("testline " + i + "\n");
            }
            
            bw.close();
            
            System.out.println("Time spend: " + (System.currentTimeMillis() - beginTime));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



2.对象的缓存

1)无缓存实现
public class NoBufferMovingCircle extends JApplet implements Runnable {
    private static final long serialVersionUID = -1081283643259866574L;
    
    Image screenImage = null;
    Thread thread;
    int x = 5;
    int move = 1;
    
    @Override
    public void init() {
        super.init();
        screenImage = createImage(230, 160);
    }
    
    @Override
    public void start() {
        super.start();
        if(thread == null) {
            thread = new Thread(this);
            thread.start();
        }
    }
    @Override
    public void run() {
        try {
            while(true) {
                x += move;
                if((x > 105) || (x < 5)) {
                    move *= -1;
                }
                repaint();
                Thread.sleep(10);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public void drawDircle(Graphics draw) {
        Graphics2D g = (Graphics2D)draw;
        g.setColor(Color.red);
        g.fillRect(0, 0, 200, 100);
        g.setColor(Color.GREEN);
        g.fillOval(x, 5, 90, 90);
    }
    
    @Override
    public void paint(Graphics g) {
        g.setColor(Color.GRAY);
        g.fillRect(0, 0, 200, 100);
        drawDircle(g);
    }
}

2)有缓存实现
    对Graphics对象缓存后applet图片显示顺畅
public class BufferMovingCircle extends JApplet implements Runnable {
    private static final long serialVersionUID = -1081283643259866574L;
    
    Image screenImage = null;
    Thread thread;
    int x = 5;
    int move = 1;
    Graphics doubleBuffer = null;
    
    @Override
    public void init() {
        super.init();
        screenImage = createImage(230, 160);
        doubleBuffer = screenImage.getGraphics();
    }
    
    @Override
    public void start() {
        super.start();
        if(thread == null) {
            thread = new Thread(this);
            thread.start();
        }
    }
    @Override
    public void run() {
        try {
            while(true) {
                x += move;
                if((x > 105) || (x < 5)) {
                    move *= -1;
                }
                repaint();
                Thread.sleep(10);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public void drawDircle(Graphics draw) {
        Graphics2D g = (Graphics2D)draw;
        g.setColor(Color.red);
        g.fillRect(0, 0, 200, 100);
        g.setColor(Color.GREEN);
        g.fillOval(x, 5, 90, 90);
    }
    
    @Override
    public void paint(Graphics g) {
        doubleBuffer.setColor(Color.GRAY);
        doubleBuffer.fillRect(0, 0, 200, 100);
        drawDircle(doubleBuffer);
        g.drawImage(screenImage, 0, 0, this);
    }
}
分享到:
评论

相关推荐

    Protocol Buffer序列化对比Java序列化.

    - Protocol Buffer:PB的设计目标之一就是跨语言兼容,它支持多种编程语言,包括C++、Java、Python等,方便多语言环境下的数据交换。 - Java序列化:主要针对Java平台,跨语言支持较差,若要在非Java环境中使用,...

    mysql优化与java高效开发.zip

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,它在处理大量数据和高并发场景时的性能优化至关重要。"JAVA开发高效代码-Mysql最佳实践.pptx"和"JAVA开发高效代码-Mysql最佳实践(1).pptx"这两个PPT文件很可能...

    java生成线缓冲区的代码

    线缓冲区的生成就是其中之一。 以下是一个简单的Java代码示例,展示了如何使用JTS库生成线缓冲区: ```java import org.locationtech.jts.geom.*; import org.locationtech.jts.io.ParseException; import org....

    java源码包---java 源码 大量 实例

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    扫描线zbuffer

    在这个案例中,使用Java源码实现扫描线ZBuffer算法,开发者可能需要自行构建一个渲染管线,包括顶点坐标转换、投影、视口变换、以及ZBuffer操作等步骤。 1. **坐标转换**:首先,3D模型的顶点需要经过模型变换、...

    Java性能优化之使用NIO提升性能(Buffer和Channel)

    Java性能优化中,NIO(New Input/Output)框架是一个重要的技术,它的引入极大地提升了Java在处理I/O操作时的效率。NIO的核心组件包括Buffer(缓冲区)和Channel(通道),它们共同解决了传统I/O模型中的一些性能...

    Java堆外内存的使用Java开发Java经验技巧共5页

    Java开发中的堆外内存使用是优化程序性能的重要策略之一,尤其在处理大数据、高并发或者内存敏感的应用场景中。堆外内存,也被称为直接内存(Direct Memory),是指不在JVM的堆内存中分配的内存,而是直接在操作系统...

    Java IO 性能优化

    虽然序列化提供了一个强大的机制来保存对象的状态,但它也可能会成为性能瓶颈之一。 ##### 4.2.1 序列化的影响 序列化过程中涉及到大量的元数据处理和对象状态的复制,这可能会导致较高的CPU使用率和内存消耗。...

    Protocol_Buffer中文翻译

    Protocol_Buffer最初由Google开发并内部使用,随后开源并逐渐成为业界标准之一。它的设计理念和功能特性不断进化,为不同应用场景提供了广泛的支持。 #### 语言指导 - **定义一个消息类型**:在`.proto`文件中定义...

    java网络编程NIO视频教程

    Java NIO-Buffer-基本使用 - **主要内容**:演示Buffer的基本操作,如创建、填充、翻转等。 - **学习目标**:学会如何简单地使用Buffer。 #### 14. Java NIO-Buffer-三个属性和类型 - **主要内容**:详细解析...

    Java 编程 :常见问题汇总

    2. **空指针异常:** 空指针异常是在Java中非常常见的错误之一。为了避免这类异常,应当养成良好的编程习惯,如使用`Objects.requireNonNull()`方法检查参数是否为`null`。 ```java public void method(Object ...

    Java工具:高性能并发工具Disruptor简单使用

    在Java编程中,高效并发处理是优化系统性能的关键之一。Disruptor,由LMAX公司开源的一款并发框架,为处理高并发场景提供了一种新颖且高效的解决方案。它通过消除锁和线程间通信的开销,实现了微秒级的延迟和极高的...

    java读取局域网共享机器文件

    首先,理解基本概念:局域网(Local Area Network, LAN)是将多台计算机连接在一起形成的网络,共享资源是其核心特性之一。共享文件即是在局域网内的某台机器上设定一个共享目录,其他机器可以通过网络路径访问这些...

    使用java上传MP4文件至mongodb数据库,并下载 源代码

    在IT行业中,数据库存储是关键任务之一,尤其是对于大型或者非结构化数据,如多媒体文件。MongoDB是一个流行的选择,因为它支持BSON文档格式,能够处理各种类型的数据,包括视频文件如MP4。本篇文章将深入讲解如何...

    java源码包3

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    java源码包2

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    Java文档500篇 Java文档

    12. **Spring框架**:作为Java领域最流行的框架之一,Spring提供了依赖注入、AOP、MVC、数据访问等功能,对于现代Java开发至关重要。 13. **测试与调试**:JUnit、Mockito等工具的使用方法,以及如何进行单元测试和...

    华为java培训内部资料

    Java编程语言是软件开发领域的主流语言之一,尤其在企业级应用中有着广泛的应用。华为作为全球知名的科技企业,对Java技术的掌握与运用有极高的要求。这份“华为java培训内部资料”旨在帮助开发者深入理解Java的核心...

    使用java+OpenCV进行图片对比并标记差异部分

    如果在运行时遇到找不到`opencv_java470.dll`文件的错误,你需要将其复制到`C:\Windows\System32`目录下,这是Windows系统查找动态链接库文件的路径之一。 其次,Java是编写图像处理程序的常用语言,具有跨平台性、...

    java源码:NIO网络框架 xSocket.rar

    Java NIO(New Input/Output)网络框架是一个高效、非阻塞的I/O模型,它在Java 1.4版本中被引入,为处理大量并发连接提供了强大的支持。xSocket是一个基于Java NIO实现的网络通信框架,它旨在提供简单易用、性能卓越...

Global site tag (gtag.js) - Google Analytics