Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala-如何从文件中读取特定字节?_Scala - Fatal编程技术网

Scala-如何从文件中读取特定字节?

Scala-如何从文件中读取特定字节?,scala,Scala,我想加密一个文本(大约1MB),并使用RSA密钥的最大长度(4096位)。然而,钥匙似乎太短了。当我在谷歌上搜索时,我知道RSA可以加密的最大文本大小比密钥长度短8字节。因此,我只能用这种方式加密501个字节。所以我决定将我的文本分成2093个数组(1024*1024/501=2092.1)。问题是如何将第一个501字节倒入scala中的第一个数组?有谁能帮我解决这个问题吗 我无法评论您的加密方法是否正确。(我不知道,但如果我站在你的立场上,我会依赖知识更丰富的密码学家编写和审查的库。我不知道你

我想加密一个文本(大约1MB),并使用RSA密钥的最大长度(4096位)。然而,钥匙似乎太短了。当我在谷歌上搜索时,我知道RSA可以加密的最大文本大小比密钥长度短8字节。因此,我只能用这种方式加密501个字节。所以我决定将我的文本分成2093个数组(1024*1024/501=2092.1)。问题是如何将第一个501字节倒入scala中的第一个数组?有谁能帮我解决这个问题吗

我无法评论您的加密方法是否正确。(我不知道,但如果我站在你的立场上,我会依赖知识更丰富的密码学家编写和审查的库。我不知道你为什么选择501,它是11字节,而不是8字节,比512短。)

但是将数组分块成固定大小的块应该很容易。只需使用函数f数组

val text : String = ???
val bytes = text.getBytes( scala.io.Codec.UTF8.charSet ) // lots of ways to do this
val blocks = bytes.grouped( 501 )

块将是一个
迭代器[Array[Byte]]
,除最后一个(可能更短)外,每个块的长度为501字节

是的,我犯了一个错误。短11个字节而不是8个字节。我使用“text.toList”,块是迭代器[List[Char]]。我想要的类型是数组[Byte],您有什么方法来更改类型吗?如我所示,最好先转到bytes,因为如果您将501个字符的块分组,无法保证在UTF8解码时这些将变成501字节(除非您确定您的文本都是ASCII)。我推荐我上面展示的方法。在这个狭义的问题上,我们可以把迭代器[List[Char]`变成
迭代器[List[Byte]]
,当然可以。类似于
iterListChar.map(u.mkString.getBytes(scala.io.Codec.UTF8.charSet))
iterListChar.map(u.mkString.getBytes(scala.io.Codec.UTF8.charSet)使其成为迭代器[Array[Byte],我需要的是Array[Byte]。您需要一个Array[Byte]的集合,每个长度为501(最后一个可能更短)。这就是
Iterator[Array]的意思[Byte]]
代表您。