字节数组

IO流

吃可爱长大的小学妹 提交于 2020-03-04 18:52:37
IO流 流的概念 IO流的分类 字节流和字符流 字节流 字符流 输入流和输出流 输入流 输出流 Java的IO流对象 字节输入流(InputStream) InputStream中的三个基本读方法 字节输出流OutputStream OutputStream中的三个基本写方法 其他方法 字符输入流Reader 主要方法 字符输出流Writer 流的概念     流的本质,数据传输,根据数据传输的特性将流抽象为各种类,方便更直观的进行数据操作。     流的作用:为数据源和目的地建立一个输送通道。      Java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流.      Java中的IO流采用装饰着模式,按功能划分流,可以根据需要动态的装配流以获得想要的功能。 IO流的分类 字节流和字符流 字节流     数据流中最小的单位为字节。 字符流     数据流中最小的单位为字符,Java中的字符采用Unicode编码,一个字符占用两个字节。 输入流和输出流 输入流      程序从输入流读取数据源,数据源包括外界(键盘,文件,网络等)。 输出流      程序向输出流写入数据,将程序中的数据输出到外界(显示器、文件,网络)。 Java的IO流对象 字节输入流

如何将字符串分配给字节数组

只谈情不闲聊 提交于 2020-03-03 18:53:15
我想将字符串分配给字节数组: var arr [20]byte str := "abc" for k, v := range []byte(str) { arr[k] = byte(v) } 还有其他方法吗? #1楼 我觉得比较好 package main import "fmt" func main() { str := "abc" mySlice := []byte(str) fmt.Printf("%v -> '%s'",mySlice,mySlice ) } 在这里检查: http : //play.golang.org/p/vpnAWHZZk7 #2楼 安全简单: []byte("Here is a string....") #3楼 除了上述方法外,您还可以做一些技巧 s := "hello" b := *(*[]byte)(unsafe.Pointer((*reflect.SliceHeader)(unsafe.Pointer(&s)))) 播放: http : //play.golang.org/p/xASsiSpQmC 您永远不要使用此:-) #4楼 小菜一碟: arr := []byte("That's all folks!!") #5楼 最终创建了数组特定的方法来执行此操作。 与每个int类型具有特定方法的 编码/二进制 包非常相似。 例如 binary

12 IO流

半城伤御伤魂 提交于 2020-03-01 09:59:25
File类: 构造方法 * File(String pathname):根据一个路径得到File对象 * File(String parent, String child):根据一个目录和一个子文件/目录得到File对象 * File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象 创建功能 * public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了,返回false * public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了 * public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来 重命名和删除功能: * public boolean renameTo(File dest):把文件重命名为指定的文件路径 * public boolean delete():删除文件或者文件夹 重命名注意事项 * 如果路径名相同,就是改名。 * 如果路径名不同,就是改名并剪切。 删除注意事项: * Java中的删除不走回收站。 * 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹 判断功能: import java.io.File; import java.io.IOException; public

字节数组转对象

不羁的心 提交于 2020-02-27 20:20:29
/// <summary> /// 字节数组转对象 /// </summary> /// <param name="buff"></param> /// <returns></returns> public static object Bytes2Object(byte[] buff) { object obj; using (MemoryStream ms = new MemoryStream(buff)) { IFormatter iFormatter = new BinaryFormatter(); obj = iFormatter.Deserialize(ms); } return obj; } 来源: https://www.cnblogs.com/apimeng/p/12374058.html

.NET中的两个字节数组比较

女生的网名这么多〃 提交于 2020-02-26 19:24:52
我该如何快速完成? 当然,我可以这样做: static bool ByteArrayCompare(byte[] a1, byte[] a2) { if (a1.Length != a2.Length) return false; for (int i=0; i<a1.Length; i++) if (a1[i]!=a2[i]) return false; return true; } 但是我正在寻找 BCL 功能或一些经过高度优化的行之有效的方法。 java.util.Arrays.equals((sbyte[])(Array)a1, (sbyte[])(Array)a2); 效果很好,但看起来不适用于x64。 在这里 记下我的超快速回答。 #1楼 我想到了许多图形卡内置的块传输加速方法。 但是随后您将不得不按字节复制所有数据,因此如果您不想以不受管且与硬件相关的代码来实现逻辑的整个部分,那么这将无济于事。 与上面显示的方法类似的另一种优化方法是,从一开始就将尽可能多的数据存储在long []中,而不是byte []中,例如,如果您从二进制文件中顺序读取数据,或者,如果您使用内存映射文件,则将数据读取为long []或单个long值。 然后,您的比较循环将只需要对包含相同数据量的byte []执行的迭代次数的1/8。 您需要何时以及多长时间比较一次

Java对象大小的计算方式

一世执手 提交于 2020-02-25 22:06:47
Java对象大小的计算方式 首先我们需要知道的是 Java 对象是包含三部分数据的: 1.对象头 2.实例数据 3.对齐填充(可能没有,因为 java 中规定对象的起始地址必须是 8 bytes 的正数倍) 对于普通对象而言,对象头中包括 mark word(8 bytes)、kclass(没有开启压缩的时候是 8 bytes,开启压缩了的话,就是 4 bytes),如果是数组类型的对象话,这里还有一个数组长度字段,4字节. 在 JDK6 64位 23 update+ 之后都默认开启了指针压缩功能. 现在验证 java 对象占几个字节. public class Person { int age; } 我使用的是64位jdk1.8,按照理论分析,Person 对象应该占的字节数: 8(mark word) + 4(kclass) + 4(实例数据) + 0(不需要对齐填充) = 16B. 而通过 visualVM 工具查看的结果也是 16B. 现在来分析下数组的内存占用情况. public class ObjectHeaderSizeTest { public static void main(String[] args) { Person[] person = new Person[4]; System.out.println(person); Thread

字节流、字符流

北战南征 提交于 2020-02-17 06:59:52
一、IO概述 1.1 什么是IO 把数据的传输,看做是一种数据的流动,按照流动的方向, 以内存为基准 ,分为 输入input 和 输出 output ,即流向内存是输入流,流出内存的输出流。 Java中I/O操作主要是指使用 java.io 包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。 1.2 IO的分类 根据数据的流向分为:输入流和输出流。 输入流 :把数据从 其他设备 上读取到 内存 中的流。 输出流 :把数据从 内存 中写出到 其他设备 上的流。 根据数据的类型分为:字节流和字符流。 字节流 :以字节为单位,读写数据的流。 字符流 :以字符为单位,读写数据的流。 1.3 顶级父类 输入流 输出流 字节流 字节输入流 InputStream 字节输出流 OutputStream 字符流 字符输出流 Reader 字符输出流 Writer 二、字节流 2.1 一切皆为字节 一切文件 数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以, 字节流可以传输任意文件数据 。在操作流的时候,我们要时刻明确, 无论使用什么样的流对象,底层传输的始终为二进制数据 。 2.2 字节输出流【OutputStream】 java.io.OutputStream 抽象类 是表示字节输出流的所有类的超类

C@指针&数组

拟墨画扇 提交于 2020-02-15 00:54:03
一、指针数组和数组指针 1、字面意思理解指针数组和数组指针 指针数组的实质就是一个数组,这个数组中存储的内容全部是指针变量 数组指针的实质是一个指针,这个指针指向的是一个数组。 2、分析指针数组和数组指针的表达式 (1)int*p[5]; int(*p)[5]; int *(p[5]); (2)一般规律 :int *p;(p是一个指针) int p[5] ;(p是一个数组) 总结:我们定义一个符号时,关键在于首先找到定义的符号是谁(第一步找核心) 其次再来看谁跟核心最近,谁跟核心结合(第二部:找结合) 以后继续向外扩展(第三步:继续向外结合直到符号完) (3)核心结合 - 如何核心和 “ * ”结合,表示核心是指针, - 如果核心和“[ ]”结合表示核心是数组, - 如果核心和小括号“()”结合,表示核心是函数 (4)一般规律来分析3个符号 例子1: int *p[5]; (“[ ]”的优先级比“ * ”优先级高) p是一个数组,数组有5个元素,数组中的元素都是指针,指针指向的元素类型是int类型,整个符号是一个指针数组。 例子2: int (*p)[5]; 核心是p,p是一个指针,因为p被用括号和星好强制结合起来了。指针指向一个数组,数组有5个元素,数组中存在的元素是int类型; 例子3: int *(p[5]); 这里 加小括号没有意义,没起到左右,没有小括号,也是p与[

C# 中字符串string和字节数组byte[]的转换

烂漫一生 提交于 2020-02-13 17:48:37
string转byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转string: string str = System.Text.Encoding.Default.GetString ( byteArray ); string转ASCII byte[]: byte[] byteArray = System.Text.Encoding.ASCII.GetBytes ( str ); ASCII byte[]转string: string str = System.Text.Encoding.ASCII.GetString ( byteArray ); 来源: https://www.cnblogs.com/xxxyz/p/12304080.html

C#合并三个字节数组的方式_艾孜尔江撰

余生长醉 提交于 2020-02-13 10:55:30
public static byte [ ] addBytes ( byte [ ] data1 , byte [ ] data2 , byte [ ] data3 ) { if ( data1 . Length . Equals ( 0 ) || data2 . Length . Equals ( 0 ) ) { if ( data3 . Length . Equals ( 0 ) ) { if ( data1 . Length . Equals ( 0 ) ) { return data2 ; } else { return data1 ; } } else { if ( data1 . Length . Equals ( 0 ) ) { byte [ ] result = new byte [ data2 . Length + data3 . Length ] ; Buffer . BlockCopy ( data2 , 0 , result , 0 , data2 . Length ) ; Buffer . BlockCopy ( data3 , 0 , result , data2 . Length , data3 . Length ) ; return result ; } else { byte [ ] result = new byte [ data1 .