【scala原理系列】scala ArrayBuffer 原理示例方法源码分析

二进制数据:ArrayBuffer和blob总结(实战),以及相互转换方法 ArrayBuffer ArrayBuffer对象用来表示通用的、固定长度的原始二进制数据缓冲区。ArrayBuffer是不可以直接操作的,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容,详细的可以查看这篇文章:前端二进制学习(三)。 var buffer = new ArrayBuffer(8); console.log(buffer.byteLength); // 输出字节 new ArrayBuffer时,传入的参数 阅读详情

scala ArrayBuffer 源码分析

ArrayBuffer 是 Scala 中的一个可变序列(mutable sequence)类,使用数组作为内部表示。它提供了高效的操作方式,包括追加、更新和随机访问等。

原理

以下是对 ArrayBuffer 类的原理进行的解释:

  • ArrayBuffer 使用数组来存储序列的元素,这样可以实现常数时间的追加、更新和随机访问操作。
  • 在追加元素时,ArrayBuffer 会检查内部数组的容量是否足够,如果不够,则会自动扩容。扩容的策略一般是创建一个更大的数组,并将原数组的元素复制到新数组中,然后将新元素添加到新数组中。
  • 在更新元素时,ArrayBuffer 可以直接通过索引访问数组,并修改对应位置的元素值。
  • ArrayBuffer 还支持插入、删除和清空操作,这些操作的性能取决于序列的大小。在插入和删除操作时,需要移动其他元素来保持序列的连续性。
  • ArrayBuffer 还提供了一些方便的方法,如获取序列的长度、判断是否为空、遍历元素等。

示例

下面是一个简单示例,展示了如何使用 ArrayBuffer 类:

import scala.collection.mutable.ArrayBuffer

// 创建一个空的 ArrayBuffer
val buffer = new ArrayBuffer[Int]()

// 追加元素到 ArrayBuffer
buffer += 1
buffer += 2
buffer += 3

// 更新元素的值
buffer(0) = 10

// 遍历元素并打印输出
for (elem <- buffer) {
  println(elem)
}

// 插入元素到指定位置
buffer.insert(1, 20)

// 删除指定位置的元素
buffer.remove(2)

// 清空 ArrayBuffer
buffer.clear()

在上述示例中,我们首先创建了一个空的 ArrayBuffer 对象。然后,我们使用 += 操作符追加元素到序列中,并使用索引操作符 () 更新元素的值。接下来,使用循环遍历元素并打印输出。然后,我们使用 insert 方法在指定位置插入元素,并使用 remove 方法删除指定位置的元素。最后,使用 clear 方法清空了 ArrayBuffer。

通过使用 ArrayBuffer,我们可以方便地进行动态大小的序列操作,包括追加、更新、插入和删除等。它是一种高效的数据结构,适用于需要频繁修改序列内容的场景。

方法总结

ArrayBuffer 是 Scala 中的一个可变序列类,它使用数组作为内部数据结构来存储元素。下面是对 ArrayBuffer 源码的分析总结:

  1. ArrayBuffer 继承了多个 trait 和类,包括 AbstractBuffer、Buffer、GenericTraversableTemplate、BufferLike、IndexedSeqOptimized、Builder、ResizableArray、CustomParallelizable 和 Serializable。

  2. ArrayBuffer 的主构造函数接受一个初始大小 initialSize 参数,用于指定内部数组的初始容量。

  3. ArrayBuffer 实现了 companion 方法,返回一个与之关联的伴生对象,类型为 GenericCompanion[ArrayBuffer]。

  4. ArrayBuffer 实现了 += 方法,用于向序列追加单个元素。该方法会检查内部数组的容量是否足够,如果不够,则会自动扩容,并将新元素添加到数组末尾。

  5. ArrayBuffer 实现了 ++= 方法,用于向序列追加一个可遍历对象中的所有元素。如果可遍历对象是 scala.collection.IndexedSeqLike 类型的,则会直接将元素复制到内部数组中;否则,会调用父类的 ++= 方法实现。

  6. ArrayBuffer 还实现了 +=: 方法和 ++=: 方法,用于在序列的开头插入元素或可遍历对象中的所有元素。这些方法会先扩容内部数组,然后将现有元素向后移动,并在开头插入新元素。

  7. ArrayBuffer 实现了 insertAll 方法,用于在指定位置插入一个可遍历对象中的所有元素。该方法会先检查插入位置的合法性,然后根据可遍历对象的大小调整内部数组的容量,并将元素插入到指定位置。

  8. ArrayBuffer 实现了 remove 方法,用于删除指定位置的元素或一定数量的连续元素。该方法会先检查删除范围的合法性,然后将后续元素向前移动,覆盖被删除的元素。

  9. ArrayBuffer 还实现了其他方法,如 clear 方法用于清空序列、sizeHint 方法用于设置序列的预期长度、result 方法返回自身作为结果等。

  10. ArrayBuffer 还提供了一些辅助方法,如 stringPrefix 方法用于定义序列的字符串表示的前缀。

  11. ArrayBuffer 的伴生对象是 ArrayBuffer,它实现了 SeqFactory[ArrayBuffer] trait,并提供了一些静态方法和隐式转换。其中,canBuildFrom 方法用于创建 CanBuildFrom 对象,用于确定返回集合类型的结果类;newBuilder 方法用于创建一个新的 ArrayBuffer 实例。

综上所述,ArrayBuffer 是一个高效的可变序列类,内部使用数组来存储元素。它提供了一系列方法用于操作序列,包括追加、更新、插入和删除等。通过自动扩容和移动元素的方式,ArrayBuffer 能够以常数时间进行追加、更新和随机访问操作,并且在插入和删除操作时具有较高的性能。

中文源码

/**
 * 使用数组来表示内部组装序列的`Buffer`类的实现。附加、更新和随机访问的时间复杂度为常数(平摊时间)。前置和删除的时间复杂度与缓冲区大小成线性关系。
 *
 * @author  Matthias Zenger
 * @author  Martin Odersky
 * @version 2.8
 * @since   1
 * @see [[http://docs.scala-lang.org/overviews/collections/concrete-mutable-collection-classes.html#array_buffers "Scala's Collection Library overview"]] 
 * 关于`Array Buffers`的更多信息,请参见相关文档
 *
 * @tparam A    数组缓冲区元素的类型。
 *
 * @define Coll `mutable.ArrayBuffer`
 * @define coll 数组缓冲区
 * @define thatinfo 返回集合的类。在标准库配置中,`That`始终是`ArrayBuffer[B]`,因为在`ArrayBuffer`对象中定义了一个类型为`CanBuildFrom[ArrayBuffer, B, ArrayBuffer[B]]`的隐式值。
 * @define bfinfo 类型为`CanBuildFrom`的隐式值,用于确定当前表示类型`Repr`和新元素类型`B`的结果类`That`。这通常是在`ArrayBuffer`对象中定义的`canBuildFrom`值。
 * @define orderDependent
 * @define orderDependentFold
 * @define mayNotTerminateInf
 * @define willNotTerminateInf
 */
@SerialVersionUID(1529165946227428979L)
class ArrayBuffer[A](override protected val initialSize: Int)
  extends AbstractBuffer[A]
     with Buffer[A]
     with GenericTraversableTemplate[A, ArrayBuffer]
     with BufferLike[A, ArrayBuffer[A]]
     with IndexedSeqOptimized[A, ArrayBuffer[A]]
     with Builder[A, ArrayBuffer[A]]
     with ResizableArray[A]
     with CustomParallelizable[A, ParArray[A]]
     with Serializable {

  override def companion: GenericCompanion[ArrayBuffer] = ArrayBuffer

  import scala.collection.Traversable

  def this() = this(16)

  /**
   * 清空缓冲区。
   */
  def clear() { reduceToSize(0) }

  /**
   * 设置缓冲区大小的提示。
   *
   * @param len  缓冲区的预期大小。
   */
  override def sizeHint(len: Int) {
    if (len > size && len >= 1) {
      val newarray = new Array[AnyRef](len)
      scala.compat.Platform.arraycopy(array, 0, newarray, 0, size0)
      array = newarray
    }
  }

  /**
   * 并行处理数组缓冲区。
   *
   * @return 一个`ParArray[A]`实例,表示并行处理的数组缓冲区。
   */
  override def par = ParArray.handoff[A](array.asInstanceOf[Array[A]], size)

  /**
   * 在缓冲区末尾添加一个元素,并返回缓冲区的引用。平摊时间复杂度为常数。
   *
   * @param elem  要追加的元素。
   * @return      更新后的缓冲区。
   */
  def +=(elem: A): this.type = {
    ensureSize(size0 + 1)
    array(size0) = elem.asInstanceOf[AnyRef]
    size0 += 1
    this
  }

  /**
   * 在缓冲区末尾追加一个可遍历对象中提供的多个元素,并返回缓冲区的引用。
   *
   * @param xs    可遍历对象。
   * @return      更新后的缓冲区。
   */
  override def ++=(xs: TraversableOnce[A]): this.type = xs match {
    case v: scala.collection.IndexedSeqLike[_, _] =>
      val n = v.length
      ensureSize(size0 + n)
      v.copyToArray(array.asInstanceOf[scala.Array[Any]], size0, n)
      size0 += n
      this
    case _ =>
      super.++=(xs)
  }


/**
 * 在缓冲区开头添加一个单个元素,并返回缓冲区的标识。时间复杂度与缓冲区大小成线性关系。
 *
 * @param elem  要添加的元素。
 * @return      更新后的缓冲区。
 */
def +=:(elem: A): this.type = {
  ensureSize(size0 + 1)
  copy(0, 1, size0)
  array(0) = elem.asInstanceOf[AnyRef]
  size0 += 1
  this
}

/**
 * 在缓冲区开头添加由遍历对象提供的多个元素,并返回缓冲区的标识。
 *
 * @param xs    遍历对象。
 * @return      更新后的缓冲区。
 */
override def ++=:(xs: TraversableOnce[A]): this.type = { insertAll(0, xs.toTraversable); this }

/**
 * 在索引`n`处插入新元素。与`update`方法相对,此方法不会替换一个元素为新元素,而是在索引`n`处插入一个新元素。
 *
 * @param n     要插入新元素的索引位置。
 * @param seq   提供要插入的所有元素的遍历对象。
 * @throws IndexOutOfBoundsException 如果`n`超出范围。
 */
def insertAll(n: Int, seq: Traversable[A]) {
  if (n < 0 || n > size0) throw new IndexOutOfBoundsException(n.toString)
  val len = seq.size
  val newSize = size0 + len
  ensureSize(newSize)

  copy(n, n + len, size0 - n)
  seq.copyToArray(array.asInstanceOf[Array[Any]], n)
  size0 = newSize
}

/**
 * 删除给定索引位置上的元素。时间复杂度与缓冲区大小成线性关系。
 *
 * @param n       引用要删除的第一个元素的索引。
 * @param count   要删除的元素数量。
 * @throws IndexOutOfBoundsException 如果`n`超出范围。
 */
override def remove(n: Int, count: Int) {
  require(count >= 0, "删除负数个元素")
  if (n < 0 || n > size0 - count) throw new IndexOutOfBoundsException(n.toString)
  copy(n + count, n, size0 - (n + count))
  reduceToSize(size0 - count)
}

/**
 * 删除给定索引位置上的元素。
 *
 * @param n  引用要删除的元素的索引。
 * @return   原先在位置`n`的元素。
 */
def remove(n: Int): A = {
  val result = apply(n)
  remove(n, 1)
  result
}

def result: ArrayBuffer[A] = this

/** 定义字符串表示形式的前缀。
 */
override def stringPrefix: String = "ArrayBuffer"
 
/**
 * `ArrayBuffer`类的工厂对象。
 *
 * $factoryInfo
 * @define coll 数组缓冲区
 * @define Coll `ArrayBuffer`
 */
object ArrayBuffer extends SeqFactory[ArrayBuffer] {
  /** $genericCanBuildFromInfo */
  implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, ArrayBuffer[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]]
  def newBuilder[A]: Builder[A, ArrayBuffer[A]] = new ArrayBuffer[A]
}

INCA刷写App文件必看:A2l文件配置与ProF文件安装详解(2023最新版) 本文深入解析了使用INCA进行ECU应用程序刷写时,A2l文件配置与ProF文件安装的关键细节与避坑指南。重点阐述了A2l文件必须与待刷写二进制文件严格匹配的核心逻辑,以及ProF文件与Bootloader版本强相关的安装策略,帮助开发者解决刷写过程中的常见失败问题,确保刷写流程的稳定与可靠。 阅读详情

相关推荐

汇川AM系列PLC玩转CNC:手把手教你用File模式读取G代码文件(附避坑指南)

本文详细介绍了如何使用汇川AM系列PLC的File模式读取G代码文件,涵盖从CAD设计到PLC配置的全流程。特别针对路径格式、文件类型等常见问题提供避坑指南,帮助工程师快速实现CNC加工的自动化控制。

weixin_33582311的博客 407

ArrayBuffer详解

ArrayBuffer详解 ArrayBuffer是所有定型数组及视图引用的基本单位。Float32Array实际上是一种“视图”,可以允许JavaScript运行时访问一块名为ArrayBuffer的预分配内存。 注意 SharedArrayBuffer是ArrayBuffer的一个变体,可以无须复制就在执行上下文间传递它。 ArrayBuffer()是一个普通的JavaScript构造函数,可用于在内存中分配特定数量的字节空间。 const buf = new ArrayBuffer(16); //

ALiang 2万+

RK3566/RK3588 NPU性能实测:用mobilenet模型快速验证你的开发板NPU是否正常工作

本文提供了RK3566/RK3588开发板NPU性能实测指南,通过MobileNet模型快速验证NPU是否正常工作。详细介绍了环境搭建、测试资源获取、编译运行及结果分析的全流程,帮助开发者高效验证神经网络加速器功能,为后续AI应用部署奠定基础。

weixin_28826521的博客 448

Scala 之 Array, ArrayBuffer 详解

第一种方法定义数组 这里的数组等同于 Java 中的数组,中括号的类型就是数组的类型 val arr1 = new Array[Int](10), 集合元素采用小括号访问 arr1(1) = 7 object ArrayDemo01 { def main(args: Array[String]): Unit = { //说明 //1. 创建了一个 Array 对象, ...

李昊轩的博客 6931

C#---第十一课:对列表的各种操作,添加、删除、排序、列表长度、获取元素的索引、FirstOrDefault()、SingleOrDefault()、last()

1.添加元素 2.删除元素 (1)删除列表中指定的元素 (2)删除列表A中所有与列表B相交的元素---常规 (3)删除列表A中所有与列表B相交的元素---lambda 3.排序(正序、倒序) 4.获取列表的最大容量(长度)、已用容量 6.获取元素在列表中的位置(index) 7.判断某元素是否在列表List中 8.获取列表中第一个元素First() & FirstOrDefault() 9.获取列表中唯一元素Single() & SingleOrDefault() 10.获取列表中最后一个元素

Alien-Hu 3627

【随机过程】 3 - 随机过程的频域分析1 - 功率谱

随机过程的频域分析 文章目录随机过程的频域分析1. 什么是谱2. 确定信号的频谱2.1 周期信号的频谱2.2 非周期信号的频谱3. 随机信号的谱3.1 随机信号做傅里叶分析的困难3.2 功率谱密度的物理和数学表示形式3.2.1 功率谱密度的物理表示3.2.2 功率谱密度的数学表示3.3 功率谱密度的解读3.3.1 量纲分析3.3.2 谱3.3.3 密度3.3.4 wiener和khinchin3.4 功率谱密度的性质3.4.1 非线性3.4.2 偶函数3.5 wiener-khinchin关系的应用3.6

qq_41741344的博客 3133

Scala中的ArrayBuffer(创建可变数组)

Scala中的ArrayBuffer (ArrayBuffer In Scala) In Scala, arrays are immutable and contain homogenous elements i.e. the size of the array cannot be changed and all the elements of the array contain the sam...

cumtv80668的专栏 4943

华为od 面试八股文_C++_01_含答案

华为od 面试八股文_C++_01_含答案

MISAYAONE的博客 5595

Scala多种集合的使用(5)之数组Array(ArrayBuffer)的操作

Scala多种集合之数组Array(ArrayBuffer)的操作

大数据智工厂 840

达摩院高清人像美肤模型ABPN的深入解析及编程实现

本文深入解析了达摩院高清人像美肤模型ABPN的原理,并提供了相应的源代码实现。ABPN模型通过自适应的反投影网络,有效地实现了人像图像的美肤处理。通过进一步的研究和优化,ABPN模型有望在人像美肤领域发挥更大的作用。低频特征提取器用于提取输入图像的低频信息,而反投影网络则负责将低频信息与原始图像结合,生成美肤后的输出图像。通过将输入图像送入ABPN模型,即可得到经过美肤处理后的输出图像。通过对输入图像进行美肤处理,可以有效地去除皮肤上的瑕疵和噪点,提升图像质量和美感。

TechPulseZ的博客 711

基于STM32设计的数字电子秤

当前项目是采用采用STM32+称重模块+OLED实现了简单的电子秤项目,称重模块上采用24位的ADC芯片,精度较高。实现了称重,校准、去皮等功能。

1万+

Scala之集合(1)

不可变集合:set集合特点:无序,不重复对set集合无序的理解:set集合的无序是指在使用append等方法给集合添加元素的时候所添加的元素的顺序是不可预测的,并且不能按照添加顺序进行遍历(存储位置是不一定的)Set集合的无序性是由它的实现方式所决定的。通常,Set集合的实现方式采用了哈希表这种数据结构,其中元素被散列到桶中,不同的元素可能被散列到同一个桶中,因此添加的顺序不能保证元素的顺序。set集合提供了SortedSet集合是有序的(放入2,3,1,4会按照1,2,3,4进行存储)SortedSet写

&volume的博客 1741

激光雷达的64线,32线,16线,你弄懂了吗?

激光雷达的 64 线、32 线、16 线是指激光雷达系统中能够同时发射和接收激光脉冲的激光线的数量5。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 2637

ArrayBuffer详细介绍

TypedArray 是一组特定类型的数组对象,它们被用来操作 ArrayBuffer 中的数据。要创建一个新的 ArrayBuffer 实例,需要使用 ArrayBuffer 构造函数,并传入一个表示字节长度的整数值作为参数。可以使用 DataView 的方法来指定偏移量和数据类型,以读取或写入特定位置的数据。一旦创建了 ArrayBuffer,我们可以使用 DataView 或 TypedArray 来读取和写入其中的数据。

学海无涯 3584

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

10分钟带你了解什么是ArrayBuffer?

ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。Typed Array是一个拥有9种类型的视图集合,每一种都是一个构造函数。Int8Array:8位有符号整数,长度1个字节,范围是。Uint8Array:8位无符号整数,长度1个字节,范围是[0 ~ 255)。:8位无符号整数,长度1个字节,溢出处理不同。Int16Array:16位有符号整数,长度2个字节,范围是。:16位无符号整数,长度2个字节,范围是。Int32Array:32位有符号整数,长度4个字节。

郊眠寺 5692

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最详细的前端二进制数据流

slice:slice 方法用来对 Blob 对象进行切割,他会返回一个新的 Blob 对象,通常在上传大数据时需要用到。stream:返回一个能够读取 Blob 中内容的。

weixin_46721670的博客 7382

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

CocosCreator 源码./polyfill/array-buffer详解

因此,一个 16 字节 ArrayBuffer 中的二进制数据可以解释为 16 个“小数字”,或 8 个更大的数字(每个数字 2 个字节),或 4 个更大的数字(每个数字 4 个字节),或 2 个高精度的浮点数(每个数字 8 个字节)。没有 splice —— 我们无法“删除”一个值,因为类型化数组是缓冲区(buffer)上的视图,并且缓冲区(buffer)是固定的、连续的内存区域。我们所能做的就是分配一个零值。对于大于 255 的任何数字,它将保存为 255,对于任何负数,它将保存为 0。

weixin_50892911的博客 516

第5章 Scala基本数据结构---ArrayBuffer

本文来自艾叔编著的《零基础快速入门Scala》免费电子书,添加文末艾叔微信,获取完整版的PDF电子书 5.2 ArrayBuffer Array的大小在声明时就已经固定了,后续是无法改变的。如果Array的大小需要变化(主要是增大),可以使用ArrayBuffer。 1.声明ArrayBuffer 例子代码如下,首先引入ArrayBuffer所需的package。 scala> import scala.collection.mutable.ArrayBuffer 声明一个ArrayB..

嵌入式快车 1174

JavaScript 之 ArrayBuffer

JS里的ArrayBuffer 还记得某个晚上在做 canvas 像素级操作,发现存储像素的数据格式并不是Array类型,而是ArrayBuffer,心想这是什么鬼?后来查了一些资料,发现自己这半年来的JS是白学了,竟然才知道还有这么个东东。 首先,这个 ArrayBuffer 类型化数组,类型化数组是JavaScript操作二进制数据的一个接口。最初为了满足JavaScript与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文本格式的背景下诞生的。 分配内存 类型

菜鸟史 2517

Scala学习笔记 --- 数组操作Array、ArrayBuffer以及遍历数组

一、Array 在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组。 此外,由于Scala与Java都是运行在JVM中,双方可以互相调用,因此Scala数组的底层实际上是Java的数组。 例如字符串数组在底层就是Java的String[],整个数组在底层就是Java的Int[]; 数组初始化后,长度就固定下来了,而且元素的全部根据其类型初始化; 也可以直接使用Array()创建数组,元素类型自动推断; val a = new Array[Int](10) val.

杨鑫newlife的专栏 1927

Scala 的Array 和 ArrayBuffer 集合

通过Array(Array1,Array2,..,Arrayn)方式可以静态地把数组中的元素定义为数组,例如Array(Array(0,2),Array(3,4))。Scala的Array与Java中的不同点为Scala中的Array可以作为序列使用,通过隐式转换的方式把Scala中的数组转换成序列。下面主要对Array和ArrayBuffer这两种相对应的集合进行介绍,通过可变数组与多维数组的理论知识结合相关案例深入分析Array和ArrayBuffer的应用。第三种方式:利用数组中的方法。

2301_81748087的博客 1098

Scala入门基础

定义函数def functionName (参数列表) : [return type] = {}例如,定义一个函数add,返回两个整型数据之和。此处两种函数作用效果一样,上面函数直接返回相加的结果,下面函数通过定义中间量sum计算两个整型的和并返回。:pastesum = x+yreturn sum函数的定义由def关键字开始,add为函数名,紧接着是可选的参数列表需要指定参数类型,之后冒号“:”后接着函数的返回类型,一个等号“=”,最后“{}”部分为函数的方法体。

2401_84185106的博客 934

浅谈ArrayBuffer、Blob和File、FileReader

ArrayBuffer、Blob和File之间的关系是,你可以通过File对象获取到Blob对象,然后通过Blob对象获取到ArrayBuffer对象。反过来,你可以通过创建一个新的Blob对象,然后使用它来创建一个新的File对象,从而将ArrayBuffer对象转换为File对象。ArrayBuffer对象用于表示一个通用的、固定长度的原始二进制数据缓冲区。它通常用于读取用户上传的文件内容,或者用于构建FileList对象,后者可以用于元素的multiple属性。

jsPao的博客 1170

JavaScript ArrayBuffer 详解与使用指南

JavaScript ArrayBuffer 详解与使用指南

我是 二川兄,对Web开发、GIS开发、3D模型、机器学习、面试技巧等方面都有一些涉猎~ 欢迎您加入技术交流圈!你可以在我的文章末尾找到我~ 2801

JavaScript中你所不知道的数组ArrayBuffer_js数组存多个arraybuffer

JavaScript 的数据类型分为两种,一种是值类型,一种是引用类型,常见的引用类型有 Object 和 Array,数组的储存模型中,如果是诸如 Number、String 之类的值类型数据会被直接压入栈中,而引用类型只会压入对该值的一个索引,用 C 语言的概念来解释就是只保存了数据的指针,这些数据是储存在堆中的某块区间中。他是一个二进制数据的原始缓冲区,虽然 JavaScript 是弱类型语言,但是他本身是对数据的类型和大小都有限制的,我们需要通过某种数据结构将缓冲区的内容有序的读取出来(写进去)。

2401_89734031的博客 712

Js:Blob、ArrayBuffer、FileReader、URL、Image、关于文件下载的方法案例

目录概括1. 基本概念1.1 Blob:存储二进制文件的“容器”。不可变。1.2 File:File接口基于Blob1.3 ArrayBuffer :表示原始的二进制数据缓冲区1.4 FileReader:异步文件读取,可进行文件类型转换1.5 URL.createObjectURL():file转成url1.6 new Image():生成一个尚未被插入 DOM 树中的 img标签2. 基本功能2.1 Blob、File可实现的功能2.2 ArrayBuffer可实现的功能2.3 Blob(File)和A

Litt_White的博客 6119
上一篇: 【Python床头书】python Pandas中的append方法详解
下一篇: 【scala原理系列】scala option原理示例源码分析
BigDataMLApplication
博客等级 码龄11年 7363粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值