发送/接收MPI Fortran Java

发送/接收MPI Fortran Java,java,fortran,mpi,openmpi,Java,Fortran,Mpi,Openmpi,我在OpenMPI和Java中有一个发送/接收实现。目标是向Java发送Fortran字符集。当Java收到这个字符串时,它会打印以下结果。 我的Fortran代码是: program simple4 implicit none include 'mpif.h' integer ierr,my_rank,size integer src, dest, tag, position, charSize integer status(MPI_STATUS_SIZE)

我在OpenMPI和Java中有一个发送/接收实现。目标是向Java发送Fortran字符集。当Java收到这个字符串时,它会打印以下结果。

我的Fortran代码是:

program simple4 
  implicit none 
  include 'mpif.h' 

  integer ierr,my_rank,size 
  integer src, dest, tag, position, charSize 
  integer status(MPI_STATUS_SIZE) 
  CHARACTER*80 TEXT

  call mpi_init(ierr) 
  call mpi_comm_rank(MPI_COMM_WORLD,my_rank,ierr) 
  call mpi_comm_size(MPI_COMM_WORLD,size,ierr) 

  src = 0 
  dest = 1 
  tag = 999

  if(my_rank.eq.0) then
    position = 0 
    TEXT = "PRO" 
    call MPI_SEND(TEXT, 3, MPI_CHARACTER, dest, tag, MPI_COMM_WORLD, ierr) 
  else 
    print *, "Fortran process ", my_rank
  end if 

  call mpi_finalize(ierr)

end
我的Java代码是:

....
char[] textChar = new char[3];
MPI.COMM_WORLD.recv(textChar, 3, MPI.CHAR, sourceRank, messageTag);
String text = String.copyValueOf(textChar);
System.out.println("Java - Text receive: " + text);
我的代码中会出现什么问题?
Fortran和Java将无法以这种方式进行通信?另一种解决方案是什么?

根本原因是Fortran
字符
ASCII
中,而Java
字符串
Unicode
中,因此需要一些额外的步骤

下面是一段您可以在Java中执行的操作

byte[] textByte = new byte[3];
MPI.COMM_WORLD.recv(textByte, 3, MPI.BYTE, sourceRank, messageTag);
String text = new String(textByte, java.nio.charset.Charset.forName("UTF-8"));
System.out.println("Java - Text receive: " + text);

默认情况下,Fortran字符是ASCII,但一些广泛使用的Fortran编译器也支持Unicode作为非默认字符类型。这可能意味着在通信的双方都使用Unicode,尽管我不确定MPI与Unicode的关系有多好!我猜
MPI\u INTEGER2
将是要使用的Fortran数据类型,但是Java呢?