`
smartzxy
  • 浏览: 199329 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

实在无聊玩割数据

    博客分类:
  • java
阅读更多

      看软设的教程太枯燥了,实在无聊,干点什么,就来写点基础的Java代码运行运行吧。上次看到有面试题是处理大数据查询的,我就来试试切割大文件吧。

      自己生成一个数据文件,来个2G大小的txt,里面装满字符“a”:

                StringBuffer sb = new StringBuffer();
		BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
				"performace.txt"));
		System.out.println("Begin...");
		long start = System.currentTimeMillis();
		for (int i = 0; i < 2048; ++i) {
			for (int j = 0; j < 1024; ++j) {
				for (int k = 0; k < 1024; ++k) {
					sb.append("a");
				}
				sb.append("\n");
			}
			bufferedWriter.write(sb.toString()); 
			sb = sb.delete(0, sb.length());
		}
		bufferedWriter.flush();
		bufferedWriter.close();
		long end = System.currentTimeMillis();
		System.out.println((end - start) + "ms elapsed.");

        接下来就割吧。割成单个的文件应该定为多大呢?我用字节buffer获取数据,试下来12MB可以,13MB就堆溢出了:

int bufSize = 1024*1024;
		StringBuffer sb=new StringBuffer();
	    byte[] bs = new byte[bufSize];
	    ByteBuffer byteBuf = ByteBuffer.allocate(bufSize);
	    System.out.println("Begin...");
	    long start = System.currentTimeMillis();
	    FileChannel channel = new RandomAccessFile("performace.txt","r").getChannel();
	    long size,count=1;
	    while((size = channel.read(byteBuf)) != -1) {
	      byteBuf.rewind();
	      byteBuf.get(bs);
	      sb.append(new String (bs));
	      if(count%(12)==0){
	    	  System.out.println(count);
	    	  BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
	  				"文件"+(count/(12))+".txt"));
	    	  bufferedWriter.write(sb.toString());
	    	  sb=sb.delete(0, sb.length());
	    	  bufferedWriter.flush();
	    	  bufferedWriter.close();
	      }
	      byteBuf.clear();
	      count++;
	    }
	    channel.close();
	    long end = System.currentTimeMillis();
	    System.out.println((end - start) + "ms elapsed.");

       但如果直接用BufferedReader读,同样用StringBuffer缓存数据,却可以割成13MB大小的文件,14MB溢出了:

int bufSize = 1024*1024;
		StringBuffer sb=new StringBuffer();
	    byte[] bs = new byte[bufSize];
	    ByteBuffer byteBuf = ByteBuffer.allocate(bufSize);
	    System.out.println("Begin...");
	    long start = System.currentTimeMillis();
	    FileChannel channel = new RandomAccessFile("performace.txt","r").getChannel();
	    long size,count=1;
	    while((size = channel.read(byteBuf)) != -1) {
	      byteBuf.rewind();
	      byteBuf.get(bs);
	      sb.append(new String (bs));
	      if(count%(12)==0){
	    	  System.out.println(count);
	    	  BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(
	  				"文件"+(count/(12))+".txt"));
	    	  bufferedWriter.write(sb.toString());
	    	  sb=sb.delete(0, sb.length());
	    	  bufferedWriter.flush();
	    	  bufferedWriter.close();
	      }
	      byteBuf.clear();
	      count++;
	    }
	    channel.close();
	    long end = System.currentTimeMillis();
	    System.out.println((end - start) + "ms elapsed.");
 
0
0
分享到:
评论

相关推荐

    七彩连珠,程序员无聊的时候可以玩玩。

    喜欢的人随便玩玩,很不错,程序员无聊的时候可以玩玩。

    无聊建站系统源码下载

    【无聊建站系统源码解析】 “无聊建站系统”是一个基于Java开发的免费内容管理系统(CMS),专为快速、高效且安全地搭建各类网站而设计。作为一个专业的IT大师,我将详细介绍这个系统的特性和核心知识点,帮助你...

    自己的东西无聊写的玩ss

    无聊自己的东西写的玩玩

    无聊的盒子_单片机_舵机_无聊的盒子_

    标题“无聊的盒子_单片机_舵机_无聊的盒子”揭示了这是一个与电子制作相关的项目,其中涉及单片机和舵机技术。在这个项目中,“无聊的盒子”可能是一个创新的装置,通过舵机来实现其开关功能,增加了互动性和趣味性...

    小小的一个游戏(无聊时玩玩)

    "小小的一个游戏(无聊时玩玩)"这个标题暗示了这是一款轻松、简单且适合消磨时间的小游戏,可能不需要复杂的操作和深度的策略,而是注重即时反应和手眼协调。 描述中的“能力测试小游戏,反应能力测试”表明这个游戏...

    渣渣c++无聊关机代码,十分无聊

    无聊的关机cpp 无聊的关机cpp 无聊的关机cpp 无聊的关机cpp

    第一届无聊的四十五中模拟赛数据.rar

    【标题】"第一届无聊的四十五中模拟赛数据.rar" 提供的是一个竞赛的数据集,很可能是编程或算法比赛中的样例数据。这类数据通常包括输入数据和对应的期望输出,用于帮助参赛者测试他们的解决方案是否正确。从标题来...

    ip攻击,朋友们大家无聊下载来玩玩。试下那种感觉

    我们几个好友试试看看谁能找到这个方法然后我们大家无聊可以玩玩

    无聊java建站系统模板_免费java建站模板下载

    "无聊建站系统"利用Java的技术优势,提供了一个稳定、高效的基础架构,可以处理大量并发访问和复杂的数据处理需求。该系统可能采用了MVC(Model-View-Controller)设计模式,将业务逻辑、数据模型和用户界面分离,...

    Delicious Bookmarks数据集

    这些标记可以视为简短的评价,通过分析这些标签,我们可以理解用户对书籍的情感倾向,例如,一个书籍被标记为“经典”或“无聊”,这些都可以作为评价指标。 4. **数据处理**:在使用这个数据集之前,我们需要进行...

    蓝桥杯官网练习题和测评数据-算法提高1-84(共44题)

    蓝桥杯练习题概览 试题集名称 试题总数 更新时间 入门训练 4 2013/10/9 基础练习 30 2013/11/3 算法训练 180 2018-03-09 算法提高 220 2018-03-09 历届试题 55 2017-12-18 包括题目和测试数据

    无聊专用聊天页面

    WebSocket提供了一种双向通信方式,使得服务器和客户端可以同时发送数据,提高了交互性。在后端,服务器可能采用Node.js、Python的Flask或Django、Java的Spring Boot等技术栈,处理用户的连接和消息传递。 聊天室的...

    37304-Python数据分析与应用-习题答案.rar.rar

    Python数据分析与应用是现代信息技术领域中的一个重要主题,尤其在大数据时代,掌握Python的数据处理技能对于数据科学家、分析师以及IT专业人士来说至关重要。这个压缩包“37304-Python数据分析与应用-习题答案.rar....

    无聊软件3.2--方便实用的小工具(40K)

    “无聊软件”是经贸学院论坛追梦管理团队无聊工作室开发的一款方便实用、解闷的小工具,经过压缩,减小代码和结合网站实时更新的功能,使软件现有大小只有40K。 绿色、无毒、无需安装,方便实用。软件主要有“万能...

    DIY无聊盒子.rar

    DIY了一个七个开关的无聊盒子,附件里包含了程序(keil5)和结构图(2016版的solidworks),物料清单可以去博客里看(https://blog.csdn.net/qq_39127371/article/details/107799245)

    使用DEAP数据库进行情感识别_deap_deap数据集_DEAPdataset_使用deap数据集进行情感识别_python_

    此外,DEAP数据集的情感标签是基于八种基本情绪:愉悦、警觉、积极、消极、平静、放松、无聊和混乱。因此,情感识别任务可以视为多分类问题,需要选择能处理多类别的模型。 在实际应用中,可能还需要考虑实时性和...

    无聊的c#作品

    无聊的c#作品无聊的c#作品无聊的c#作品无聊的c#作品

    一个非常非常无聊的东西

    标题 "一个非常非常无聊的东西" 可能是在戏谑地表达这个软件或工具的独特性,它可能是一个非主流或者趣味性的应用,旨在让用户的键盘体验变得与众不同。在IT领域,有时候创新和趣味性的结合可以带来出人意料的用户...

    孤独无聊的说说,伤感无聊的说说.doc

    文档中的“孤独无聊的说说”反映了人们在数字化世界中可能感受到的孤独和无聊,这在设计更人性化的人机交互时需考虑。 2. **社交媒体的影响**:社交媒体平台上的动态和状态更新(如“说说”)是用户表达情感和情绪...

    论文研究 - 无聊与社会越轨行为的实证研究

    本文的目的是分析无聊与偏差行为之间的关系。 尽管由于以下原因引起的警觉性有所增加,但这个领域仍未被偏差社会学完全探索:青年人的行为异常和群体犯罪。 在简要介绍了文献中最重要的贡献之后,为了加深这个问题,...

Global site tag (gtag.js) - Google Analytics