I am making an app where I need to have my PC and phone communicate via Bluetooth. I have gotten the app and my PC to successfully connect, and my app is receiving an input stream when I send "Hello World" from my PC. However, I cannot seem to figure out how to get a readable string from my input stream. Here is the code I have so far:
private static class BluetoothAcceptThread extends Thread {
        private final Context CONTEXT;
        private final BluetoothAdapter BLUETOOTH_ADAPTER = BluetoothAdapter.getDefaultAdapter();
        private final BluetoothServerSocket BLUETOOTH_SERVER_SOCKET;
        private final java.util.UUID UUID;
        public BluetoothAcceptThread(Context context, java.util.UUID uuid) {
            this.CONTEXT = context;
            this.UUID = uuid;
            BluetoothServerSocket tmp = null;
            try {
                tmp = BLUETOOTH_ADAPTER.listenUsingRfcommWithServiceRecord(
                        CONTEXT.getString(R.string.app_name), UUID);
            } catch (IOException e) {
                e.printStackTrace();
            }
            BLUETOOTH_SERVER_SOCKET = tmp;
        }
        @Override
        public void run() {
            while (true) {
                BluetoothSocket socket = null;
                try {
                    System.out.println("Accepting incoming connections");
                    socket = BLUETOOTH_SERVER_SOCKET.accept();
                    System.out.println("Found connection!");
                } catch (IOException e) {
                    System.out.println(1);
                    e.printStackTrace();
                }
                if (socket != null) {
                    manageConnectedSocket(socket);
                }
                try {
                    assert socket != null;
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        public void cancel() {
            try {
                BLUETOOTH_SERVER_SOCKET.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public void manageConnectedSocket(BluetoothSocket socket) {
            try {
                InputStream inputStream = socket.getInputStream();
                while(inputStream.read() == -1) {
                    inputStream = socket.getInputStream();
                }
                String string = CharStreams.toString( new InputStreamReader(inputStream, "UTF-8"));
                System.out.println(string);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
In case it is relevant, here is the test code I am running from my PC:
import bluetooth
import pydbus
def list_connected_devices():
    bus = pydbus.SystemBus()
    mngr = bus.get('org.bluez', '/')
    mngd_objs = mngr.GetManagedObjects()
    connected_devices = []
    for path in mngd_objs:
        con_state = mngd_objs[path].get('org.bluez.Device1', {}).get('Connected', False)
        if con_state:
            addr = mngd_objs[path].get('org.bluez.Device1', {}).get('Address')
            name = mngd_objs[path].get('org.bluez.Device1', {}).get('Name')
            connected_devices.append({'name': name, 'address': addr})
    return connected_devices
def main():
    address = list_connected_devices()[0]["address"]
    uuid = "38b9093c-ff2b-413b-839d-c179b37d8528"
    service_matches = bluetooth.find_service(uuid=uuid, address=address)
    first_match = service_matches[0]
    port = first_match["port"]
    host = first_match["host"]
    sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
    sock.connect((host, port))
    message = input("Enter message to send: ")
    sock.send(message)
if __name__ == '__main__':
    main()
EDIT:
Tried using the solution suggested by Sajeel by using IO utils, and I am getting the error:
W/System.err: java.io.IOException: bt socket closed, read return: -1
W/System.err:     at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:550)
        at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:88)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:291)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:355)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:181)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.Reader.read(Reader.java:140)
        at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2369)
W/System.err:     at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2348)
        at org.apache.commons.io.IOUtils.copy(IOUtils.java:2325)
        at org.apache.commons.io.IOUtils.copy(IOUtils.java:2273)
        at org.apache.commons.io.IOUtils.toString(IOUtils.java:1041)
        at com.example.app.BluetoothSyncService$BluetoothAcceptThread.manageConnectedSocket(BluetoothSyncService.java:278)
        at com.example.app.BluetoothSyncService$BluetoothAcceptThread.run(BluetoothSyncService.java:251)
EDIT 2:
I motherflipping got it! Here is the code that got it to work:
public void manageConnectedSocket(BluetoothSocket socket) {
        try {
            InputStream inputStream = socket.getInputStream();
            while(inputStream.available() == 0) {
                inputStream = socket.getInputStream();
            }
            int available = inputStream.available();
            byte[] bytes = new byte[available];
            inputStream.read(bytes, 0, available);
            String string = new String(bytes);
            System.out.println(string);
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    