3

Problem Description : - During one discussion I found that programmer stuck at point and I thought I should put on forum.

Today I was searching array conversion into char array. And I checked definition of toCharArray() method of string class.

char str[] = "native".toCharArray();

toCharArray() definition : -

public char[] toCharArray() {
    char result[] = new char[count];
    getChars(0, count, result, 0);
    return result;
}

getChars definition: -

public void getChars(int srcBegin,int srcEnd,char dst[],int dstBegin){
   if(srcBegin<0){
       throw new StringIndexOutOfBoundsException(srcBegin);
   }
   if(srcEnd>count){
       throw new StringIndexOutOfBoundsException(srcEnd);
   }
   if(srcBegin>srcEnd){
       throw new StringIndexOutOfBoundsException(srcEnd-srcBegin);
   }
   System.arraycopy(value,offset+srcBegin,dst,dstBegin,srcEnd-srcBegin);
}

Then a native method: -

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                         int length);

Here I don't have to understand native but I have to know In such a native method define here in a same way different native method will define for other operating system.

4

3 回答 3

2

大多数操作尽可能独立于操作系统。

有一些明显的例外,例如 Runtime.exec(String command) 将完全取决于您安装了哪些命令。

这只会创建操作系统允许的文件名。在 Linux 上,您可以使用在 Windows 中无效的字符。Windows 也不区分大小写,这意味着如果您有另一个具有相同名称的文件,忽略大小写,它将在 Windows 上覆盖,但在 Linux 中创建一个新文件。

new FileOutputStream(String filename)

一个常见的问题是 Linux 允许您删除尚未关闭的文件,但 Windows 不会。这可能导致不同平台上的不同行为。

于 2013-06-04T17:48:39.320 回答
2

由于 Java 语言的主要优点是跨硬件平台和操作系统的可移植性。所以一个特定的方法,虽然被声明为原生的,但不应该改变你的签名,例如,名称或参数,以遵循这个原则。

但是,可以改变的是本机方法的实现。此实现是特定于平台的JNI 提供了一种以独立于平台的方式使用任何本机方法的方法。

于 2013-06-04T17:33:09.660 回答
2

它是本机的原因是因为可以通过使用本机代码对这个昂贵的功能进行大量优化。

但是无论操作系统如何,行为都是相同的。

于 2013-06-04T17:10:02.243 回答