Wolfram mathematica 我怎样才能在输入流上进行Get?

Wolfram mathematica 我怎样才能在输入流上进行Get?,wolfram-mathematica,drm,Wolfram Mathematica,Drm,编码包的一个恼人之处是它们必须位于单独的文件中。如果我们想要发布一个简单的自包含应用程序(编码),我们需要提供两个文件:应用程序“接口”和应用程序包 如果我将编码文件的所有内容放在一个字符串中,并将该字符串转换为一个InputStream,那么将该包内容视为一个文件就完成了一半 但是,据我所知,这是唯一一个具有解码功能的操作(也被需求使用),它对流不起作用。它只适用于真实文件 有人能想出一种获取流的方法吗?等待Mathematica出现在我的iPhone上,所以无法测试任何东西,但为什么不将字符

编码包的一个恼人之处是它们必须位于单独的文件中。如果我们想要发布一个简单的自包含应用程序(编码),我们需要提供两个文件:应用程序“接口”和应用程序包

如果我将编码文件的所有内容放在一个字符串中,并将该字符串转换为一个InputStream,那么将该包内容视为一个文件就完成了一半

但是,据我所知,这是唯一一个具有解码功能的操作(也被需求使用),它对流不起作用。它只适用于真实文件


有人能想出一种获取流的方法吗?

等待Mathematica出现在我的iPhone上,所以无法测试任何东西,但为什么不将字符串写入一个临时文件并获取它呢

更新

以下是如何做到这一点:

encoded = ToFileName[$TemporaryDirectory, "encoded"];

Export[encoded, "code string", "Text"]; (*export encrypted code to temp file *)
使用ASCII编辑器从包含编码代码的ASCII文件中复制代码字符串的内容,并将其粘贴到现有的空引号(“”)之间,这一点很重要。Mathematica将自动转义代码中可能存在的反斜杠和引号。此文件已在前面使用
Encode
创建。无法在示例代码中执行此操作,因为SO的标记会弄乱字符串

Get[encoded] (* get encrypted code and decode *) 

DeleteFile[encoded] (* Remove temp  file *)

最终答案
Get
似乎不需要解码<代码>导入字符串也可以工作:

ImportString["code string", "NB"] 
如上所述,从ASCII编辑器将编码的tekst直接粘贴到“”之间,并让MMA进行转义


我不知道获取流的方法,但您可以将编码数据存储在单个包中,将其写入临时文件,然后使用Get将临时文件读回。

只是为了保持最新:


Get
从V9.0开始就可以处理流。

@p.Fonseca支持这一建议:在really
StringToStream
中,它只是做同样的事情:在临时目录中创建一个临时文件,在其中写入字符串,然后以普通方式处理该文件。您可以自己使用Windows的实用程序行来确定这一事实。@alexey我记得您在
ImportString
上对本次讨论的评论:。问题是:您能否
Get
a
StringToStream
stream?我想没有。很抱歉我误导了你,但在上面的评论中我错了:我只是把
StringToStream
ImportString
混在了一起。我现在检查了一下,发现
StringToStream
没有创建临时文件,而
ImportString
创建了临时文件。抱歉搞混了。@Sjoerd-几乎完美:可以强制使用machineID,但不能强制使用特定的键。在数学方面做得很好;在免费播放器上不起作用(我认为这是因为它不创建临时导出文件),但可能由于许可协议的免费部分,它也不应该起作用;我希望这对未来的职业球员有用。谢谢。@P.Fonseca您的问题没有提到CDF播放器的兼容性。如果你在找的话,希望就不大了。播放器不允许导出,请参阅。我预见的一个问题是,
Encode
的输出可能包含引号;参见
Encode
doc页面上的示例,这里有一个。为了将其存储在字符串中,必须转义所有引号。反斜杠也是一样。转义部分不会有问题。当我们用ctrl-c将代码复制到一个单元格中时,前端已经为我们完成了这项工作。我在9小时前的回答中已经写到了这一点。我在最新的更新中有一个较短的方法。