字节数组

字节输入流和字节输出流

家住魔仙堡 提交于 2019-12-31 04:33:42
字节输入流:InputStream属于抽象类,用其子类FileInputStream进行实例化。(先定义字节数组,实例化输入流对象,读取文件内容到字节数组中,再输出) 第一种方式: package 字节流; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class InputStreamDemo01 { public static void main(String[] args) throws IOException{ File f=new File("f:"+File.separator+"File"+File.separator+"字节流.txt"); InputStream in=new FileInputStream(f);//字节流实例化 byte[] b=new byte[(int)f.length()];//新建一个字节数组,长度正好是文件的长度 in.read(b);//读取文件中的内容存储在字节数组中 in.close();//关闭输入流 System.out.println("长度:"+f.length());//输出文件的长度 System.out.println("内容为:"

指针

旧巷老猫 提交于 2019-12-26 18:20:53
前言 这不是我第一次写关于C指针的文章了,只是因为指针对于C来说太重要,而且随着自己编程经历越多,对指针的理解越多,因此有了本文。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以我想通过一篇文章来尽可能的讲解指针,以对得起这个文章的标题吧。 为什么需要指针? 指针解决了一些编程中基本的问题。 第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果, 但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。 第二,指针使得一些复杂的链接性的数据结构的构建成为可能,比如链表,链式二叉树等等。 第三,有些操作必须使用指针。如操作申请的堆内存。还有: C语言中的一切函数调用中,值传递都是“按值传递(pass by value)”的,如果我们要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。 指针是什么? 我们指知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。

几百万数据放入内存不会把系统撑爆吗?

妖精的绣舞 提交于 2019-12-23 18:34:25
在公司有一个需求是要核对一批数据,之前的做法是直接用SQL各种复杂操作给怼出来的,不仅时间慢,而且后期也不好维护,就算原作者来了过一个月估计也忘了SQL什么意思了,于是有一次我就想着问一下之前做这个需求的人为什么不将这些数据查出来后在内存里面做筛选呢?直接说了你不怕把内存给撑爆吗?此核算服务器是单独的服务器,配置是四核八G的,配置堆的大小是4G。本着怀疑的精神,就想要弄清楚几百万条数据真的放入内存的话会占用多少内存呢? 计算机的存储单位 计算机的存储单位常用的有bit、Byte、KB、MB、GB、TB后面还有但是我们基本上用不上就不说了,我们经常将bit称之为比特或者位、将Byte简称为B或者字节,将KB简称为K,将MB称之为M或者兆,将GB简称为G。那么他们的换算单位是怎样的呢? 换算关系 首先我们得知道在计算机中所有数据都是由0 1来组成的,那么存储0 1这些二进制数据是由什么存放呢?就是由bit存放的,一个bit存放一位二进制数字。所以bit是计算机最小的单位。 大部分计算机目前都是使用8位的块,就是我们上面称之为的字节Byte,来作为计算机容量的基本单位。所以我们一般称一个字符或者一个数字都是称之为占用了多少字节。 了解了上面关于位和字节的关系后,我们可以看一下其他的单位换算关系 11B(Byte 字节) = 8bit(位) 21KB = 1024B 31MB =

Java IO流

被刻印的时光 ゝ 提交于 2019-12-22 00:37:34
一 IO 流 用于处理设备上数据 流 : 可以理解数据的流动 就是一个数据流 IO 流最终要以对象来体现 对象都存在 IO 包中 1. 流的分类 : 1 > 输入流 ( 读 ) 和输出流 ( 写 ) 2 > 因为处理的数据不同 分为字节流和字符流 2. 字节流 处理字节数据的流对象 设备上的数据无论是图片或者 dvd, 文字 , 它们都以二进制存储的 二进制的最终都是以一个 8 位为数据单元进行体现 所以计算机中的最小数据单元就是字节 意味着 字节流可以处理设备上的所有数据 所以字节流一样可以处理字符数据 3. 字符流 因为字符每个国家都不一样 所以涉及到了字符编码问题 那么 GBK 编码的中文用 unicode 编码解析是有问题的 所以需要获取中文字节数据的同时指定的编码表才可以解析正确数据 为了方便于文字的解析 所以将字节流和编码表封装成对象 这个对象就是字符流 只要操作字符数据 优先考虑使用字符流体系 4. 注意 流的操作只有两种 读和写 流的体系因为功能不同 但是有共性内容 不断抽取 形成继承体系 该体系一共有四个基类 而且都是抽象类 在这四个系统中 它们的子类 都有一个共性特点 子类名后缀都是父类名 前缀名都是这个子类的功能名称 5. 字节流 InputStream OutputStream 6. 字符流 Reader Writer public static void

几百万数据放入内存不会把系统撑爆吗?

£可爱£侵袭症+ 提交于 2019-12-21 19:02:57
在公司有一个需求是要核对一批数据,之前的做法是直接用SQL各种复杂操作给怼出来的,不仅时间慢,而且后期也不好维护,就算原作者来了过一个月估计也忘了SQL什么意思了,于是有一次我就想着问一下之前做这个需求的人为什么不将这些数据查出来后在内存里面做筛选呢?直接说了你不怕把内存给撑爆吗?此核算服务器是单独的服务器,配置是四核八G的,配置堆的大小是4G。本着怀疑的精神,就想要弄清楚几百万条数据真的放入内存的话会占用多少内存呢? 计算机的存储单位 计算机的存储单位常用的有 bit 、 Byte 、 KB 、 MB 、 GB 、 TB 后面还有但是我们基本上用不上就不说了,我们经常将 bit 称之为比特或者位、将 Byte 简称为 B 或者字节,将 KB 简称为 K ,将 MB 称之为M或者兆,将 GB 简称为 G 。那么他们的换算单位是怎样的呢? 换算关系 首先我们得知道在计算机中所有数据都是由 0 1 来组成的,那么存储 0 1 这些二进制数据是由什么存放呢?就是由 bit 存放的,一个 bit 存放一位二进制数字。所以 bit 是计算机 最小的存储单位 。 大部分计算机目前都是使用8位的块,就是我们上面称之为的字节 Byte ,来作为计算机容量的基本单位。所以我们一般称一个字符或者一个数字都是称之为占用了多少字节。 了解了上面关于位和字节的关系后,我们可以看一下其他的单位换算关系 1B

Java IO流详解

£可爱£侵袭症+ 提交于 2019-12-21 05:08:12
参考转载地址: https://blog.csdn.net/zhangliangzi/article/details/51226652         http://www.cnblogs.com/ysocean/p/6870069.html         https://www.cnblogs.com/jmsjh/p/7761272.html         http://blog.csdn.net/hguisu/article/details/7418161 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 IO又分为流IO(java.io)和块IO(java.nio) Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Java也对块传输提供支持,在核心库 java.nio中采用的便是块IO。 流IO的好处是简单易用,缺点是效率较低。块IO效率很高,但编程比较复杂。 这里先讲流IO。 2.流的基本概念 在电脑上的数据有三种存储方式,一种是外存,一种是内存,一种是缓存。比如电脑上的硬盘,磁盘,U盘等都是外存,在电脑上有内存条

UTF-8编码规则(转)

ⅰ亾dé卋堺 提交于 2019-12-21 01:11:45
UTF-8编码规则(转) UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现。 UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。 如表: 1字节 0xxxxxxx 2字节 110xxxxx 10xxxxxx 3字节 1110xxxx 10xxxxxx 10xxxxxx 4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的

2 MD5加密 java实现

巧了我就是萌 提交于 2019-12-18 13:47:47
  百度百科对MD5的说明是:   Message Digest Algorithm MD5(中文名为 消息摘要算法 第 五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。 MD5 即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译 摘要算法 、 哈希算法 ),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、 MD3 和 MD4 。   MD5算法具有以下特点: 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出MD5值很容易。 3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。   MD5的作用是让大容量信息在用 数字签名 软件签署私人 密钥 前被" 压缩 "成一种保密的格式(就是把一个任意长度的字节串变换成一定长的 十六进制 数字串)。 通常采用java提供的API实现的MD5加密程序如下所示: 1 import java.security.MessageDigest; 2 import java.security

从流创建字节数组

落花浮王杯 提交于 2019-12-17 20:39:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 从输入流创建字节数组的首选方法是什么? 这是我目前使用.NET 3.5的解决方案。 Stream s; byte[] b; using (BinaryReader br = new BinaryReader(s)) { b = br.ReadBytes((int)s.Length); } 读取和写入流的块是否仍然是一个更好的主意? #1楼 您甚至可以通过扩展程序使其变得更加漂亮: namespace Foo { public static class Extensions { public static byte[] ToByteArray(this Stream stream) { using (stream) { using (MemoryStream memStream = new MemoryStream()) { stream.CopyTo(memStream); return memStream.ToArray(); } } } } } 然后将其称为常规方法: byte[] arr = someStream.ToByteArray() #2楼 上面的那个是好的...但是当您通过SMTP发送内容时(如果需要),您将遇到数据损坏。 我已经改为其他有助于正确发送字节的东西:' using System;

序列化

为君一笑 提交于 2019-12-10 08:04:06
序列化: 就是将内存中的对象转换为字节序列,方便持久化到磁盘或者网络传输。 对象序列化过程可以分为两步: 第一: 将对象转换为字节数组 第二: 将字节数组存储到磁盘 public static byte[] getByteArray4Object(Object obj)throws Exception{ ByteArrayOutputStream bao=new ByteArrayOutputStream(); ObjectOutputStream os=new ObjectOutputStream(bao); os.writeObject(obj); return bao.toByteArray(); } public static void writeByteArrayToFile(String textFilePath,byte[]bytearr)throws Exception{ FileOutputStream fos=new FileOutputStream(new File(textFilePath)); fos.write(bytearr); } 反序列化 就是将字节序列转换为内存中的对象 可以是文件中的,也可以是网络传输过来的 对象的序列化和反序列化主要就是使用ObjectOutputStream 和 ObjectInputStream